如何在JavaScript或jQuery中进行ping操作?

11

我想在Javascript中创建一个类似于Counter Strike游戏的ping,我正在通过AJAX调用服务器(MySQL)并希望计算所需时间,但我要么计算错误,要么对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,连接数据库,选择一些行并返回一些数据非常快。是的,这是在本地主机上,所以应该很快,但它应该这么快吗?我应该按FPS计算它,还是只计算每个对server.php的调用?


我猜应该没问题。尝试从server.php获取一些输出,如果它响应良好,那就没问题了 :) 如果你使用Chrome或Firebug,请查看ajax请求时间。 - David Rodrigues
1
确保Web服务器向server.php发送头信息以防止缓存。 - Michael Berkowski
谢谢您的帮助。我进行了调查,发现Chrome给出的结果比我的计算少1毫秒,这是可以接受的。 - Kivylius
2
将一个随机数添加到请求中可以防止浏览器(特别是IE)像“server.php?r=”+ Math.random()一样缓存。我在类似的情况下遇到了这个缓存问题,这个技巧很有效。 - Zafer
2个回答

8

响应时间较低是因为默认情况下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)上计算准确的延迟,您需要服务器计算并在响应中返回值。除了本地主机以外得到任何非0ms的值都足以证明这一点 :P
连接状态的最早时间为stackoverflow.com获取到300ms,而真实数字更接近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) 花费了 949毫秒


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接