我正在制作一个Web应用程序,该应用程序需要检查远程服务器是否在线。当我从命令行运行它时,我的页面加载将达到完整的60秒(对于8个条目,它将随着更多线性增长)。
我决定在用户端执行ping操作。这样,我可以加载页面并让他们在浏览内容时等待“服务器在线”数据。
如果有人对以上问题有答案,或者他们知道一种可以使我的页面快速加载的解决方案,我一定会很感激的。
我发现有人通过非常巧妙地使用本机Image对象来完成此任务。
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错误。如果有人可以验证替代解决方案,我将其作为公认的答案。
net::ERR_NAME_NOT_RESOLVED