我已经制作了这个ping.js脚本但是我似乎得到了相当高的ping,即使我从CMD ping我得到的ping也低得多。无论如何,我能够显示真正的ping而不是更高的值,这将是值得赞赏的。
function colorcode(ms){
if (ms < 65) {return "#8bc53f";
} else if ((ms >= 65) && (ms < 160)) { return "#f26522";
} else if ((ms >= 160) && (ms < 400)) { return "#ed1c24";
} else if ((ms >= 400) && (ms < 1000)) { return "#ed1c24";
} else { return "#232323"; }
}
function output_text(txt,id){
txt = Math.round((3/4)*txt);
var obj = document.getElementById(id);
var txt_ = "<font color='"+colorcode(parseInt(txt))+"'>"+((parseInt(txt)<1000)?txt+"</font> ms":"Offline</font>");
obj.innerHTML=txt_;
}
function reping() {
i = 2;
for(var id in idips){
setTimeout("ping2('"+id+"','"+idips[id]+"',"+(i*2+1)+")",i);
i += 100;
}}
var idips = new Array();
function ping(id,ip,i){
document.write("<span id='"+id+"'>pinging server...</span>");
setTimeout("ping2('"+id+"','"+ip+"',"+i+")",(i+2)*100);
idips[id] = ip;
}
function koekjes(){
var koekje = new Array('k','o','e','j','w','s');
var koek = new Array();
var rd = new Array();
var koekz = '';
var rd = new Array();
for(i=0;i<=21;i++){
rd[i] = Math.floor(Math.random()*koekje.length);
koekz += koekje[rd[i]];
}
return koekz
}
function ping2(id,ip,i) {
var ImageObject = new Image();
ImageObject.onerror = function(evt){ var endTime = new Date(); output_text(endTime-startTime,id);}
ImageObject.onload = function(evt){ var endTime = new Date(); output_text(endTime-startTime,id);}
var startTime = new Date();
ImageObject.src = "http://"+ip+"/"+koekjes()+".gif";
}
感谢。
答案 0 :(得分:1)
您可以衡量发送请求和获得答案之间的延迟。
命令行程序ping
使用ICMP数据包,您使用HTTP请求。
HTTP请求需要建立TCP连接,发送请求(HTTP非常繁琐),解析请求,处理请求,发送响应以及解析响应。< / p>
但主要问题是握手,这使得请求慢了三倍。
要获得实际延迟,您无法使用time / 3
,因为连接可能是kept alive,在这种情况下没有握手。
总结:不要使用HTTP / TCP来衡量延迟。
您可以只连接到一个关闭的端口,如3或4.在这种情况下,服务器会拒绝连接尝试(TCP syn)。 (Syn是TCP握手的第一部分。)