Mla*_*vic 14 javascript browser flash latency ping
我运行了几个游戏隧道服务器,并希望有一个页面,客户端可以在所有服务器上运行ping,并找出响应最快的服务器.据我所知,似乎没有正确的方法在JavaScript中执行此操作,但我在想,是否有人知道在Flash或其他一些客户端浏览器技术中执行此操作的方法?
Mr.*_* 安宇 17
大多数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;
}
Run Code Online (Sandbox Code Playgroud)
然后等待适当的时间并检查每个服务器对象的时间.根据需要重复并根据需要计算平均值.我不确定你能期待什么样的准确度.
缺点:
在调用服务器之前,记录Javascript时间:
var startTime = new Date();
Run Code Online (Sandbox Code Playgroud)
从服务器加载图像:
var img = new Image()
img.onload = function() {
// record end time
}
img.src = "http://server1.domain.com/ping.jpg";
Run Code Online (Sandbox Code Playgroud)
请求完成后,立即记录时间.(当然,请求没有超时.)
var endTime = new Date();
Run Code Online (Sandbox Code Playgroud)
您的ping以毫秒为单位:
var ping = endTime. getTime() - startTime.getTime();
Run Code Online (Sandbox Code Playgroud)
您真正需要的是从连接开始到第一次状态变化的时间......
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.");
}
| 归档时间: |
|
| 查看次数: |
13314 次 |
| 最近记录: |