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

测试WebSocket API:如何获取单条实时数据的服务器到客户端毫秒级响应时间

如何获取WebSocket单条实时数据的毫秒级传输耗时(HH:MM:SS:sss格式)

一、Postman中实现单条数据耗时统计

Postman的WebSocket会话支持自定义脚本,可精准计算每条消息的传输耗时,分两种场景处理:

场景1:客户端主动发请求触发服务器推送

在WebSocket请求的两个脚本模块中添加代码:

  1. Pre-request Script:记录客户端发送请求的时间
pm.globals.set("sendTime", new Date().getTime());
  1. On Message Script:收到消息时计算耗时并格式化为目标格式
const receiveTime = new Date().getTime();
const sendTime = pm.globals.get("sendTime");
const latency = receiveTime - sendTime;

// 格式化毫秒数为HH:MM:SS:sss
function formatLatency(ms) {
  const hours = Math.floor(ms / 3600000);
  const minutes = Math.floor((ms % 3600000) / 60000);
  const seconds = Math.floor((ms % 60000) / 1000);
  const milliseconds = ms % 1000;
  return `${String(hours).padStart(2, '0')}:${String(minutes).padStart(2, '0')}:${String(seconds).padStart(2, '0')}:${String(milliseconds).padStart(3, '0')}`;
}

console.log(`单条数据传输耗时:${formatLatency(latency)}`);
pm.environment.set("currentLatency", formatLatency(latency));

场景2:服务器主动推送消息(无客户端请求触发)

如果服务器返回的消息携带自身发送的毫秒级时间戳(比如JSON格式里的serverSendTime字段),优先用这个时间戳计算,避免客户端与服务器时间不同步的误差:

// On Message Script
const receiveTime = new Date().getTime();
const message = JSON.parse(pm.response.text());
const serverSendTime = message.serverSendTime;
const latency = receiveTime - serverSendTime;

// 复用上面的formatLatency函数
const formattedLatency = formatLatency(latency);
console.log(`单条数据传输耗时:${formattedLatency}`);

二、JMeter中正确统计单条WebSocket消息耗时

你之前误用了平均响应时间,JMeter可以精准捕获单条消息的耗时,步骤如下:

  1. 选用合适的WebSocket Sampler:如果是服务器主动推送,用WebSocket Sampler (Jetty);如果是请求-响应模式,用WebSocket Request-Response Sampler。
  2. 在Sampler配置中开启Capture individual messages,让JMeter为每条收到的消息生成独立样本。
  3. 添加JSR223 PostProcessor到Sampler下方,编写Groovy脚本来格式化耗时:
def latency = prev.getTime(); // 获取当前样本的响应时间(毫秒)
def hours = String.format("%02d", latency / 3600000 as int);
def minutes = String.format("%02d", (latency % 3600000) / 60000 as int);
def seconds = String.format("%02d", (latency % 60000) / 1000 as int);
def milliseconds = String.format("%03d", latency % 1000);
def formattedLatency = "${hours}:${minutes}:${seconds}:${milliseconds}";
prev.setResponseMessage("传输耗时:${formattedLatency}");

配置完成后,在View Results Tree中就能看到每条消息的格式化耗时。

三、关键注意事项

  • 优先使用服务器发送时间戳计算耗时,避免客户端与服务器时间不同步导致的误差。
  • Postman的控制台可实时查看每条消息的耗时日志,方便调试;JMeter的样本结果可导出做后续分析。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 20:32:48