当前位置:  开发笔记 > 编程语言 > 正文

如何通过浏览器确定远程服务器的延迟

如何解决《如何通过浏览器确定远程服务器的延迟》经验,为你挑选了3个好方法。

我运行了几个游戏隧道服务器,并希望有一个页面,客户端可以在所有服务器上运行ping,并找出响应最快的服务器.据我所知,似乎没有正确的方法在JavaScript中执行此操作,但我在想,是否有人知道在Flash或其他一些客户端浏览器技术中执行此操作的方法?



1> Mr. Shiny an..:

大多数applet技术(包括Javascript)都强制执行同源策略.可以动态添加DOM元素(例如图像),并使用onload事件处理程序收集定时信息.

伪代码

for (server in servers) {
  var img = document.createElement('IMG');
  server.startTime = getCurrentTimeInMS();
  img.onload=function() { server.endTime = getcurrentTimeInMS(); }
  img.src = server.imgUrl;
}

然后等待适当的时间并检查每个服务器对象的时间.根据需要重复并根据需要计算平均值.我不确定你能期待什么样的准确度.

缺点:

您可能正在使用错误的工具来完成工作.此类应用程序不配备浏览器.

这可能是非常不准确的.

如果您请求的资源被缓存,它将无法提供您想要的结果,但您可以通过每次更改URL来解决此问题.

与普通ping相比,这是带宽密集型的.使图像变小,例如spacer.gif文件.

时间不仅取决于远程服务器的延迟,还取决于该服务器的带宽.这可能是一个或多或少有用的措施,但重要的是要注意它不仅仅是延迟.

您需要能够从各种服务器提供HTTP请求,并且至关重要的是,每个服务器应该提供完全相同的资源(或相同长度的资源).服务器上的条件可能会影响响应时间,例如,如果一个服务器正在压缩数据而另一个服务器没有.



2> Georg Schöll..:

在调用服务器之前,记录Javascript时间:

var startTime = new Date();

从服务器加载图像:

var img = new Image()
img.onload = function() {
    // record end time
}
img.src = "http://server1.domain.com/ping.jpg";

请求完成后,立即记录时间.(当然,请求没有超时.)

var endTime = new Date();

您的ping以毫秒为单位:

var ping = endTime. getTime() - startTime.getTime();



3> Tracker1..:

您真正需要的是从连接开始到第一次状态变化的时间......

function getPing() {
  var start;
  var client = getClient(); // xmlhttprequest object
  client.onreadystatechange = function() {
    if (client.readyState > 0) {
      pingDone(start); //handle ping
      client.onreadystatechange = null; //remove handler
    } 
  }

  start = new Date();
  client.open("HEAD", "/ping.txt"); //static file
  client.send();
}

function pingDone(start) {
  done = new Date();
  ms = done.valueOf() - start.valueOf();
  alert(ms + "ms ping time");
}

function getClient() {
  if (window.XMLHttpRequest)
    return new XMLHttpRequest();

  if (window.ActiveXObject)
    return new ActiveXObject('MSXML2.XMLHTTP.3.0');

  throw("No XMLHttpRequest Object Available.");
}

推荐阅读
mylvfamily
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有