我想衡量打开(和关闭)与服务器的tcp连接的延迟。 我不想发送/接收任何数据,因为我希望尽可能少的开销来消除服务器端的任何内容,从而增加请求时间。
将其视为TCP ping。记录当前时间,连接到主机:端口,断开连接,计算增量时间。
我相信Javascript不允许打开直接套接字,但是我希望它可以做什么(例如AJAX请求)它可以以某种形状或形式使用以满足我的要求。
编辑:
有关服务器的一些信息:
即使我可以尝试连接,然后由于以上几点而拒绝,如果我能抓住异常,我仍然可以使用它连接的事实来确定延迟。
答案 0 :(得分:1)
由于我们在应用层内部运行,因此我们只能通过HTTP进行延迟测试。
var xhr = new XMLHttpRequest()
xhr.open("HEAD", "/", false)
console.time("latency");
xhr.send();
console.timeEnd("latency");
代码说明:
我为当前主机创建了一个同步AJAX请求。我使用"HEAD"
作为非常轻量级且不接收任何内容的方法。因此,我们可以假设“HEAD”请求的往返非常接近ICMP或TCP上的实际ping。
对于URL,使用"/"
(当前主机)。由于同源政策,您不能只使用http://google.com之类的任何域名,除非您被允许这样做。
我使用console.time()
和console.timeEnd()
来衡量持续时间,这比使用常规Date
更准确。但是,您也可以使用Date
来衡量持续时间:
//...
var now = (new Date()).getTime()
xhr.send();
var duration = (new Date()).getTime() - now; //ms
<强>更新强> 即使发生异常,也请尝试使用此代码来测量延迟:
try {
var xhr = new XMLHttpRequest()
xhr.open("HEAD", "http://google.com" + "/?" + Math.random(), false)
console.time("latency");
xhr.send();
}
catch (e){
//block exception
}
finally {
console.timeEnd("latency");
}
请注意,我还在网址末尾添加了一个随机数,以防止浏览器缓存。