如何解决是否可以从 Javascript ping 服务器??

我发现有人通过非常巧妙地使用本机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 服务器和游戏服务器)。它也适用于端口。如果有人遇到失败的用例,请在评论中发布,我会更新我的答案。

:之前的链接已被删除。如果有人发现或实施上述内容,请发表评论,我会将其添加到答案中。

:@trante 很好地提供了一个 jsfiddle

http://jsfiddle.net/GSSCD/203/

:@Jonathon 创建了一个带有实现的 GitHub 存储库。

https://github.com/jdfreder/pingjs

:看起来这个实现似乎不再可靠。人们还报告说 Chrome
不再支持这一切,抛出一个net::ERR_NAME_NOT_RESOLVED错误。如果有人可以验证替代解决方案,我会将其作为接受的答案。

解决方法

我正在制作一个需要检查远程服务器是否在线的网络应用程序。当我从命令行运行它时,我的页面加载会上升到 60 秒(对于 8 个条目,它将随着更多条目线性缩放)。

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

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