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

如何在JMeter中为WebSocket添加带超时的Keep-Alive

在JMeter中配置WebSocket带超时的Keep-Alive(解决Socket Closed错误)

1. 先理清核心问题

HTTP的Connection: keep-alive请求头只针对HTTP连接生效,WebSocket作为独立的长连接协议,需要通过Ping/Pong帧来维持连接——服务器收到Ping后会回复Pong,若超时未收到Pong,连接就会被主动关闭,这就是你遇到的Socket Closed错误。

2. 借助JMeter WebSocket插件配置Ping/Pong机制

JMeter原生不支持WebSocket,需先安装WebSocket Samplers by Peter Doornbosch插件:

  • 打开JMeter,进入Options > Plugins Manager
  • 在Available Plugins中搜索插件名称,勾选后安装,重启JMeter

配置方式一:独立Ping/Pong采样器

  • 添加WebSocket Open Connection采样器,填入你的WebSocket服务地址(如ws://your-server:port/path)
  • 添加WebSocket Ping/Pong Sampler,放在连接采样器之后:
    • 设置Ping Interval (ms):比如30000(30秒),即每隔30秒发送一次Ping帧
    • 设置Timeout (ms):比如5000(5秒),发送Ping后5秒未收到Pong则判定连接异常
    • 按需勾选Auto-Close Connection on Timeout
  • 将这些采样器放在同一线程组,确保连接打开后持续执行Ping/Pong

配置方式二:在请求采样器中启用自动Ping

如果使用WebSocket Request Sampler(发送文本/二进制消息),可直接启用内置Ping:

  • 打开采样器的Advanced标签页
  • 勾选Enable automatic Ping
  • 设置Ping interval (seconds):比如30
  • 设置Ping timeout (seconds):比如5
  • 这样采样器会在空闲时自动发送Ping帧维持连接

3. 调整JMeter全局连接超时参数

打开JMeter安装目录下bin/jmeter.properties文件,修改以下参数:

# 全局socket连接超时
httpclient.socket.timeout=60000
# WebSocket专属超时
websocket.connect.timeout=60000
websocket.read.timeout=60000

保存后重启JMeter,避免底层连接被强制关闭。

4. 验证配置效果

  • 运行测试计划,通过View Results Tree查看采样器结果,确认Ping/Pong帧正常收发
  • 若仍出现Socket Closed错误,可尝试缩短Ping间隔(如15秒)或延长超时时间

注意事项

  • 确保你的WebSocket服务器支持Ping/Pong响应,否则即使发送Ping,服务器不回复Pong仍会触发超时
  • HTTP的Connection: keep-alive头对WebSocket连接无效,无需保留

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 01:52:11