当前位置: 首页 > 面试题库 >

是否可以从Javascript ping服务器?

杜哲彦
2023-03-14
问题内容

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

我决定在用户​​端执行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服务器和游戏服务器)。它还适用于端口。如果有人遇到失败的用例,请在评论中发布,我将更新答案。

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

更新2 :@trante足以提供jsFiddle。

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

更新3 :@Jonathon使用实现创建了一个GitHub存储库。

https://github.com/jdfreder/pingjs

更新4
:看来此实现不再可靠。人们还报告说Chrome不再支持所有功能,从而引发net::ERR_NAME_NOT_RESOLVED错误。如果有人可以验证替代解决方案,我将其作为公认的答案。



 类似资料:
  • 我知道Netbeans可以从。wsdl文件生成Java方法。 Netbeans可以基于Java类及其所有方法创建。wsdl文件吗? https://netbeans.org/kb/docs/websvc/jax-ws.html 我知道怎么做那部分。我想知道是否有更好、更快的方法从我已经拥有的Java方法中开发出web服务。 假设我有一个Java接口类,它要求2个字符串输入并返回一个字符串: 那个包

  • 在google play服务的示例中,他们处理可能的版本更新,如下所示: 这将产生一条类似于

  • 我最近注意到,就餐提供了使用服务器启动器的可能性。在本手册中报告: Repast Simphony 2.7中的新增功能是能够使用Web浏览器作为用户交互界面运行您的模型。基于浏览器的GUI具有以下功能: 列表项 2D网格、连续空间和地理(GIS)可视化(目前仅限于编辑样式) 标签式和自由形式可视化布局时间序列图 特工探测 模型参数设置 模型运行时交互(运行、停止、暂停等) 我试着用这种模式启动我的

  • 我们公司有限制:不能npm publish上传包到 registry.npmjs.org 请问下,是否可以有方式设置网络代理,比如,有一个服务器,我先代理到服务器,服务器再上传到registry.npmjs.org ?

  • 问题内容: 我正在使用google map version3 api的google map应用程序,特别是google.maps.geometry.encoding中的实用程序方法,例如decodePath,encodePath,computeDistanceBetween,interpolate,以便计算位置 在Web应用程序的第一个版本中,大多数应用程序逻辑都在Web浏览器中,现在我想将一些逻

  • 我正在尝试基于Netty构建一个UDP服务器,以便根据客户端订阅(在订阅设置之前交换一些UDP请求/响应消息)将事件(大约每秒500个事件)连续发布到不同的客户端。 设计是由Java执行器创建一些生产者/消费者线程。生成消息后,使用者线程将其写入UDP通道。 观察到,服务器端只有一个EventLoop线程在为该UDP通道工作,并且它非常忙于向套接字写入消息,因此对第二个和更高版本客户端的订阅请求的