当前位置:首页 > JavaScript

js实现ping

2026-03-01 01:50:49JavaScript

在JavaScript中实现类似Ping的功能通常需要借助WebSocket、HTTP请求或第三方API,因为浏览器端的JavaScript无法直接发送ICMP请求(传统Ping协议)。以下是几种常见的方法:

使用HTTP请求模拟Ping

通过测量从发送HTTP请求到接收响应的时间来模拟Ping的延迟。这种方法依赖目标服务器支持HTTP/HTTPS。

async function httpPing(url, count = 4) {
  const results = [];
  for (let i = 0; i < count; i++) {
    const start = performance.now();
    try {
      await fetch(url, { method: 'HEAD', mode: 'no-cors' });
      const duration = Math.round(performance.now() - start);
      results.push({ seq: i + 1, time: duration, status: 'success' });
    } catch (e) {
      results.push({ seq: i + 1, time: null, status: 'failed' });
    }
  }
  return results;
}

// 使用示例
httpPing('https://example.com').then(console.log);

使用WebSocket检测延迟

如果目标服务支持WebSocket,可以通过建立连接的时间估算延迟:

function wsPing(url, count = 4) {
  const results = [];
  let counter = 0;
  return new Promise((resolve) => {
    const runTest = () => {
      const start = performance.now();
      const ws = new WebSocket(url);
      ws.onopen = () => {
        const duration = Math.round(performance.now() - start);
        results.push({ seq: counter + 1, time: duration, status: 'success' });
        ws.close();
        if (++counter < count) setTimeout(runTest, 1000);
        else resolve(results);
      };
      ws.onerror = () => {
        results.push({ seq: counter + 1, time: null, status: 'failed' });
        if (++counter < count) setTimeout(runTest, 1000);
        else resolve(results);
      };
    };
    runTest();
  });
}

// 使用示例(需真实WebSocket地址)
wsPing('wss://echo.websocket.org').then(console.log);

通过第三方API实现

部分服务提供Ping功能的API封装(如cloudflare或自定义后端):

async function apiPing(apiUrl, target, count = 4) {
  const response = await fetch(`${apiUrl}?target=${target}&count=${count}`);
  return await response.json();
}

// 使用示例(需自行部署或使用现有API)
apiPing('https://your-api.com/ping', 'example.com').then(console.log);

注意事项

  • 浏览器安全策略限制:跨域请求需目标服务器配置CORS。
  • 精度差异:HTTP/WebSocket延迟包含TCP握手时间,不同于ICMP Ping。
  • 服务器支持:目标必须开放对应协议端口(80/443/ws等)。

对于Node.js环境,可使用net模块或ping包实现真实ICMP Ping:

js实现ping

// Node.js示例(需安装ping包)
const ping = require('ping');
ping.promise.probe('example.com').then(res => console.log(res.time));

标签: jsping
分享给朋友:

相关文章

js实现轮播图

js实现轮播图

基础轮播图实现 使用HTML、CSS和JavaScript实现一个简单的自动轮播图。HTML结构包含一个容器和多个图片项。 <div class="slider"> <div…

js实现防洪

js实现防洪

防抖(Debounce)实现 防抖的核心思想是在事件触发后延迟执行回调函数,若在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口调整等场景。 function debounce(func,…

js画图实现

js画图实现

使用Canvas API绘制图形 Canvas是HTML5提供的绘图API,通过JavaScript操作Canvas元素可以绘制各种图形。以下是一个简单的示例: <canvas id="myC…

js实现 功能

js实现 功能

在 JavaScript 中实现功能通常涉及多个关键步骤,具体取决于功能需求。以下是常见功能的实现方法和示例: 基本功能实现 使用函数封装逻辑是最直接的方式。例如,实现一个计算两数之和的函数: f…

js实现的游戏

js实现的游戏

JavaScript 游戏开发基础 JavaScript 是开发网页游戏的流行选择,因其无需插件即可在浏览器中运行。以下是一些关键技术和资源: HTML5 Canvas Canvas 提供了绘制图形…

js实现原理

js实现原理

JavaScript 实现原理 JavaScript 是一种解释型语言,其实现原理涉及多个核心组件和运行机制,包括引擎、运行时环境、事件循环等。 引擎与解释执行 现代 JavaScript 引擎(如…