【问题标题】:How to ping in JavaScript or jQuery?如何在 JavaScript 或 jQuery 中 ping?
【发布时间】:2012-01-22 13:56:01
【问题描述】:

我想在 Javascript 中创建类似游戏的 ping,就像游戏 Counter Strike 一样。我正在对服务器(MySQL)进行 AJAX 调用,并想计算所花费的时间,但我要么计算错误,要么对 ping 有错误的想法。这是我到目前为止的代码:

var time_stamp = new Date;

$.ajax({ type: "POST",
    url: "server.php",
    data: {....},
    success: function(output){ 

        ping = new Date - time_stamp;

    }
}); // btw, this code works fine now for ping

问题是有时我会得到 0ms 或 3ms。这个可以吗?去server.php,连接数据库,选择一些行,返回一些数据似乎很快。是的,这是在 localhost 上,所以它应该很快,但它的意思是这么快吗?我应该以 FPS 计算,还是每次调用server.php

【问题讨论】:

  • 我想没关系。尝试从server.php 获取一些输出,如果它响应正常,那没关系:) 如果您使用 Chrome 或 Firebug,请查看 ajax 请求时间。
  • 确保 Web 服务器在 server.php 上发送标头以防止缓存。
  • 感谢您的帮助。我进行了调查,Chrome 给我的时间比我的计算低 1 毫秒,这没问题。
  • 向请求中添加一个随机数可以防止浏览器(尤其是 IE)像“server.php?r=" + Math.random() 那样缓存。我在类似的情况下遇到了这个缓存问题,这个技巧成功了。

标签: javascript jquery ajax ping


【解决方案1】:

较低的响应时间是因为默认情况下cache属性设置为true,将其设置为false,这样每次它都会进入服务器而不是缓存

var ping = new Date;

$.ajax({ type: "POST",
    url: "server.php",
    data: {....},
    cache:false,
    success: function(output){ 

        ping = new Date - ping;

    }
});

【讨论】:

    【解决方案2】:

    您将无法在客户端计算准确的延迟(不包括 java、flash 或 websockets),您需要服务器计算它并在响应中返回值。为 localhost 获取除0ms 之外的任何内容应该足以证明这一点:P

    连接状态的最早时间让我得到300ms for stackoverflow.com,而实际数字更接近100ms

    var a = new XMLHttpRequest();
    
    a.onreadystatechange = function () {
    
        if (a.readyState === a.HEADERS_RECEIVED) {
            a.abort();
            console.log(new Date - abc);
        }
    };
    
    var abc = new Date;
    
    a.open("GET", "/");
    a.send(null);
    

    等待完整回复 (a.DONE) 需要 949ms

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-03
      • 2015-03-30
      • 2011-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多