是否可以从Javascript ping服务器?我正在制作一个Web应用程序,要求我检查远程服务器是否在线。当我从命令行运行它时,我的页面加载速度达到了整整60秒(对于8个条目,它会随着更多线性线性扩展)。我决定在用户端进行ping操作。这样,我可以加载页面,让他们在浏览我的内容时等待“服务器在线”数据。如果有人对上述问题有答案,或者他们知道解决方案以保持我的页面加载速度快,我肯定会感激。
3 回答
阿晨1998
TA贡献2037条经验 获得超6个赞
我发现有人通过非常巧妙地使用本机Image对象来实现这一点。
从他们的来源来看,这是主要功能(它依赖于源的其他部分,但你明白了)。
function Pinger_ping(ip, callback) {
if(!this.inUse) {
this.inUse = true;
this.callback = callback this.ip = ip;
var _that = this;
this.img = new Image();
this.img.onload = function() {_that.good();};
this.img.onerror = function() {_that.good();};
this.start = new Date().getTime();
this.img.src = "http://" + ip;
this.timer = setTimeout(function() { _that.bad();}, 1500);
}}这适用于我测试过的所有类型的服务器(Web服务器,ftp服务器和游戏服务器)。它也适用于端口。如果有人遇到失败的用例,请在评论中发帖,我会更新我的答案。
更新:上一个链接已被删除。如果有人发现或实施上述内容,请发表评论,我会将其添加到答案中。
更新2:@trante足以提供jsFiddle。
http://jsfiddle.net/GSSCD/203/
更新3:@Jonathon创建了一个带有实现的GitHub仓库。
https://github.com/jdfreder/pingjs
更新4:看起来这个实现不再可靠。人们还报告Chrome不再支持所有内容,从而引发net::ERR_NAME_NOT_RESOLVED错误。如果有人可以验证替代解决方案,我会将其作为接受的答案。
守着一只汪
TA贡献1872条经验 获得超4个赞
你可以试试这个:
在有或没有任何内容的服务器上放置ping.html,在javascript上执行如下操作:
<script>
function ping(){
$.ajax({
url: 'ping.html',
success: function(result){
alert('reply');
},
error: function(result){
alert('timeout/error');
}
});
}</script>
Helenr
TA贡献1780条经验 获得超4个赞
Ping是ICMP,但如果远程服务器上有任何打开的TCP端口,则可以像这样实现:
function ping(host, port, pong) {
var started = new Date().getTime();
var http = new XMLHttpRequest();
http.open("GET", "http://" + host + ":" + port, /*async*/true);
http.onreadystatechange = function() {
if (http.readyState == 4) {
var ended = new Date().getTime();
var milliseconds = ended - started;
if (pong != null) {
pong(milliseconds);
}
}
};
try {
http.send(null);
} catch(exception) {
// this is expected
}}添加回答
举报
0/150
提交
取消
