当前位置:首页 > JavaScript

js实现ping

2026-03-01 01:50:49JavaScript

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

使用HTTP请求模拟Ping

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

js实现ping

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,可以通过建立连接的时间估算延迟:

js实现ping

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:

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

标签: jsping
分享给朋友:

相关文章

js实现vue

js实现vue

Vue.js 简介 Vue.js 是一个渐进式 JavaScript 框架,用于构建用户界面。其核心库专注于视图层,易于与其他库或现有项目整合。 实现 Vue.js 的基本步骤 安装 Vue.j…

js实现

js实现

实现 JavaScript 功能的方法 在 JavaScript 中实现特定功能通常涉及多个步骤。以下是常见的实现方法: 基础语法和变量声明 使用 let 或 const 声明变量: let…

js实现论坛

js实现论坛

实现论坛的基本功能 使用JavaScript实现一个论坛需要结合前端和后端技术。前端可以使用React、Vue或Angular等框架,后端可以选择Node.js配合Express或Koa框架。数据库可…

js实现报表

js实现报表

使用JavaScript实现报表 在JavaScript中实现报表功能可以通过多种方式完成,常见的方法包括使用原生JavaScript、第三方库(如Chart.js、D3.js)或结合后端数据渲染。以…

js实现选题

js实现选题

实现选题功能的JavaScript方法 基础实现方案 使用数组存储选项,通过随机索引选取: const options = ['选项A', '选项B', '选项C', '选项D']; const…

js画图实现

js画图实现

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