You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ping是服务器往返时长还是请求发起到服务端接收的时长?JS如何计算ping

ping的定义澄清

标准ICMP协议的ping测量的是往返总时长(RTT,Round-Trip Time),即从客户端发出请求的瞬间,到客户端完整收到服务器响应的瞬间的总时长。单向时长需要客户端和服务端时钟高度同步(毫秒级误差以内),普通公网场景几乎无法实现,日常所说的ping值均指往返时延。

计算方式与代码修正

你当前的代码存在异步时序问题:没有等待response.json()异步操作完成就记录了afterRequest,且fetch的promise决议时机是响应头到达客户端,而非响应体完全接收,会导致时间统计不准,修正后的参考代码如下:

async function getResponseTimeOnce(){
  const times = {};
  times.beforeRequest = Date.now();
  const response = await fetch("https://randobytes.yimmee.repl.co/ping");
  // 假设接口返回格式为 {serverReceive: 服务端接收请求时间戳, serverSend: 服务端发送响应时间戳}
  const serverTime = await response.json();
  times.serverReceive = serverTime.serverReceive;
  times.serverSend = serverTime.serverSend;
  // 响应体完全解析完成后再记录客户端结束时间
  times.afterRequest = Date.now();
  return times;
}

你可以根据需求选择对应的计算逻辑:

  • 如果你需要的是包含服务端处理耗时的HTTP层往返时延,直接用 times.afterRequest - times.beforeRequest 即可,这个值是用户侧实际感知的接口响应耗时,最常用。
  • 如果你需要更接近ICMP ping的纯网络传输往返时延,可以排除服务端处理的耗时,公式为:(times.afterRequest - times.beforeRequest) - (times.serverSend - times.serverReceive)

小提示:用HTTP请求测的ping值会比系统原生ICMP ping值略高,因为包含了TCP握手、TLS握手、HTTP协议解析等额外开销。

内容的提问来源于stack exchange,提问作者TGP1cccul8r

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 02:54:03