当前位置:首页 > JavaScript

js 实现 ping

2026-04-06 23:52:19JavaScript

在 JavaScript 中实现类似网络 ping 的功能通常通过发送 HTTP 请求或使用 WebSocket 来检测网络延迟和连通性。以下是几种常见方法:

js 实现 ping

使用 fetch API 测量延迟

通过发送 HTTP 请求并计算响应时间模拟 ping

js 实现 ping

async function ping(url) {
  const start = performance.now();
  try {
    const response = await fetch(url, { method: 'HEAD', mode: 'no-cors' });
    const end = performance.now();
    return end - start; // 返回延迟时间(毫秒)
  } catch (error) {
    return -1; // 请求失败
  }
}

// 使用示例
ping('https://example.com').then(delay => {
  console.log(delay >= 0 ? `延迟: ${delay}ms` : '请求失败');
});

使用 Image 对象检测连通性

适用于简单连通性测试,但不返回具体延迟:

function pingViaImage(url) {
  return new Promise(resolve => {
    const img = new Image();
    const start = Date.now();
    img.onload = img.onerror = () => {
      resolve(Date.now() - start);
    };
    img.src = `${url}?t=${Date.now()}`; // 避免缓存
  });
}

使用 WebSocket 实现实时 ping

适用于需要持续监测的场景:

function websocketPing(url) {
  const ws = new WebSocket(url);
  const start = performance.now();
  ws.onopen = () => {
    const latency = performance.now() - start;
    console.log(`WebSocket 延迟: ${latency}ms`);
    ws.close();
  };
  ws.onerror = () => console.log('连接失败');
}

注意事项

  • 跨域限制:普通 HTTP 请求受同源策略限制,可通过 mode: 'no-cors' 发送简单请求,但无法读取响应内容。
  • 准确性:网络波动可能导致单次测量不准确,建议多次测量取平均值。
  • 服务端支持:部分服务器可能拒绝 HEAD 请求,需根据实际目标调整方法。

以上方法可根据具体需求选择,HTTP 方案适合简单检测,WebSocket 适合需要双向通信的场景。

标签: jsping
分享给朋友:

相关文章

js实现vue

js实现vue

Vue.js 的基本实现方法 在 JavaScript 中实现 Vue.js 的功能,可以通过直接引入 Vue 库或使用现代构建工具(如 Vite 或 Webpack)。以下是几种常见的实现方式:…

js 实现继承

js 实现继承

原型链继承 通过让子类的原型对象指向父类的实例来实现继承。子类实例可以访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Par…

js实现复制功能

js实现复制功能

使用 document.execCommand 方法 这种方法适用于较旧的浏览器,但在现代浏览器中可能被逐步淘汰。通过创建一个临时的 textarea 元素,将文本内容放入其中,然后执行复制命令。…

js实现类

js实现类

JavaScript 实现类的几种方式 JavaScript 是一种基于原型的语言,但在 ES6 之后引入了 class 语法糖,使得实现类更加直观。以下是几种常见的实现方式: 使用构造函数 传统的…

js实现密码

js实现密码

密码强度验证 使用正则表达式验证密码强度是一种常见方法。以下代码检查密码是否包含大小写字母、数字和特殊字符,且长度至少为8位: function checkPasswordStrength(pass…

js实现吸色

js实现吸色

使用Canvas实现吸色功能 通过Canvas的getImageData方法获取像素颜色数据。创建一个Canvas元素,将目标图像绘制到Canvas上,通过鼠标事件获取坐标对应的颜色值。 const…