是否可以从Javascript ping服务器?

是否可以从Javascript ping服务器?

我正在制作一个Web应用程序,要求我检查远程服务器是否在线。当我从命令行运行它时,我的页面加载速度达到了整整60秒(对于8个条目,它会随着更多线性线性扩展)。

我决定在用户端进行ping操作。这样,我可以加载页面,让他们在浏览我的内容时等待“服务器在线”数据。

如果有人对上述问题有答案,或者他们知道解决方案以保持我的页面加载速度快,我肯定会感激。


MYYA
浏览 353回答 3
3回答

阿晨1998

我发现有人通过非常巧妙地使用本机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错误。如果有人可以验证替代解决方案,我会将其作为接受的答案。

守着一只汪

你可以试试这个:在有或没有任何内容的服务器上放置ping.html,在javascript上执行如下操作:<script> &nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;ping(){ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$.ajax({ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;url:&nbsp;'ping.html', &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;success:&nbsp;function(result){ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert('reply'); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;error:&nbsp;function(result){ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert('timeout/error'); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}); &nbsp;&nbsp;&nbsp;&nbsp;}</script>

Helenr

Ping是ICMP,但如果远程服务器上有任何打开的TCP端口,则可以像这样实现:function&nbsp;ping(host,&nbsp;port,&nbsp;pong)&nbsp;{ &nbsp;&nbsp;var&nbsp;started&nbsp;=&nbsp;new&nbsp;Date().getTime(); &nbsp;&nbsp;var&nbsp;http&nbsp;=&nbsp;new&nbsp;XMLHttpRequest(); &nbsp;&nbsp;http.open("GET",&nbsp;"http://"&nbsp;+&nbsp;host&nbsp;+&nbsp;":"&nbsp;+&nbsp;port,&nbsp;/*async*/true); &nbsp;&nbsp;http.onreadystatechange&nbsp;=&nbsp;function()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(http.readyState&nbsp;==&nbsp;4)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;ended&nbsp;=&nbsp;new&nbsp;Date().getTime(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;milliseconds&nbsp;=&nbsp;ended&nbsp;-&nbsp;started; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(pong&nbsp;!=&nbsp;null)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pong(milliseconds); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;}; &nbsp;&nbsp;try&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;http.send(null); &nbsp;&nbsp;}&nbsp;catch(exception)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;this&nbsp;is&nbsp;expected &nbsp;&nbsp;}}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript