是否可以用js实现网络ping测试?

我想通过js完成网络功能下的ping命令测试,有没有成功的例子?

阅读 6.3k
2 个回答

我可以给你一个具体的示例。假设你想要用js实现一个HTTP ping测试,你可以使用ping.js这个库,它可以让你用简单的代码来发送HTTP请求并获取响应时间,要在你的网页中引入ping.js这个库,你可以从GitHub上下载,或者使用CDN链接:

<script src="ping.js"></script>
<!-- 或者 -->
<script src="https://cdn.jsdelivr.net/npm/ping.js@latest"></script>

使用Ping对象来创建一个ping测试,传入一个目标地址和一个回调函数,回调函数会接收一个参数,表示响应时间(单位是毫秒):

var p = new Ping();
p.ping("https://example.com", function(err, data) {
  // 如果有错误,err会是一个Error对象,否则为null
  // 如果成功,data会是一个数字,表示响应时间
  if (err) {
    console.error(err);
  } else {
    console.log("Ping time was " + String(data) + " ms");
  }
});
你可以重复使用同一个Ping对象来ping不同的地址,也可以创建多个Ping对象来ping不同的地址:
var p = new Ping();
var urls = ["https://example.com", "https://google.com", "https://bing.com"];
urls.forEach(function(url) {
  p.ping(url, function(err, data) {
    if (err) {
      console.error(err);
    } else {
      console.log("Ping time for " + url + " was " + String(data) + " ms");
    }
  });
});

如果你想要测试网络状况,用 JavaScript 实现真正的 ICMP ping 测试是不可能的,因为 JavaScript 没有直接访问底层网络协议的能力。但你可以通过发送 AJAX 请求到服务器来测试网络状况,由服务器执行 ping 测试并返回结果。但这样做有一些限制,比如只能测试服务器和目标地址之间的网络状况,并且需要在服务器端实现 ping 逻辑。如果你只需要进行简单的 HTTP ping 测试,可以通过发送 HTTP 请求到目标地址,并记录请求开始和结束时间来计算 ping 值。但这种方法也有不足,比如无法使用 ICMP 协议,结果可能不太准确,需要找到合适的目标地址等。因此,用 JavaScript 实现网络 ping 测试并不是最好的选择,你可以使用专业的在线工具或软件来获取更准确和全面的网络状况信息。

其实就是利用img标签的load方法

  function ping (ip) {
    var img = new Image();
    var start = new Date().getTime();
    img.src = "http://" + ip + "?t=" + start;
    var flag = false;  //无法访问
    img.onload = function () {
      flag = true;
      console.log('ok');
    };
    img.onerror = function () {
      flag = true;
      console.log('ok');
    };
    var timer = setTimeout(function () {
      if (!flag) {    //如果真的无法访问
        flag = false;
        console.log('failed');
      }
    }, 1500);
  }
  ping('10.8.16.184:8080')
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏