websocket多连接并发性能调优核心在于协议透传、超时控制、缓冲策略和系统级资源释放四方面协同:必须配置proxy_http_version 1.1、proxy_set_header upgrade $http_upgrade、proxy_set_header connection "upgrade";关闭proxy_buffering和proxy_cache;设proxy_read_timeout与proxy_send_timeout为86400;并扩容系统nofile限制及内核参数。

WebSocket 多连接并发性能调优,核心不是堆硬件,而是让系统“稳住长连接、管好资源、不丢消息”。关键在协议透传、超时控制、缓冲策略和系统级资源释放四方面协同生效。
确保 WebSocket 协议头正确透传
Nginx 或其他反向代理若过滤 Upgrade 和 Connection 头,握手直接失败(返回 200 而非 101)。必须显式配置:
- proxy_http_version 1.1; —— 启用 HTTP/1.1 长连接支持
- proxy_set_header Upgrade $http_upgrade; —— 动态透传 Upgrade 头
- proxy_set_header Connection "upgrade"; —— 显式声明升级意图
漏掉 $http_upgrade 变量或写成 "" 是常见连不上原因,尤其对接 Node.js ws、Spring Boot WebSocket 或 .NET Core 的场景。
关闭缓冲与禁用缓存,避免消息延迟或错乱
WebSocket 是实时流式通信,Nginx 默认的响应缓冲和缓存机制会破坏语义:
- proxy_buffering off; —— 关闭响应体缓冲,消息逐帧透传
- proxy_cache off; —— 禁用所有缓存,防止 Upgrade 请求被缓存命中
- proxy_redirect off; —— 避免重定向干扰长连接生命周期
Python websockets 库中也建议设 compression=None,可将单连接内存从 64KB 降至约 14KB,减轻 GC 压力。
WebSocket 8.18.2 是该协议规范的一个重要迭代版本,主要优化了连接稳定性与数据传输效率。它通过全双工通信机制,允许客户端与服务器在单一长连接上实时交换数据,大幅降低传统 HTTP 轮询的开销。该版本增强了心跳保活、自动重连及二进制帧传输能力,适用于即时通讯、在线游戏及金融行情推送等低延迟场景,为开发者提供更可靠的实时网络交互基础。
调大超时时间并匹配心跳节奏
默认 60 秒超时在长连接场景下极易断连。需按实际心跳周期设置:
- proxy_read_timeout 86400; —— 设为略大于客户端 ping 间隔(如客户端每 30 秒发 ping,服务端 read 超时至少设 60–90 秒)
- proxy_send_timeout 86400; —— 防止大消息分片发送中途被中断
- 后端代码中同步设置读写 deadline,例如 Go 中
conn.SetReadDeadline(time.Now().Add(60 * time.Second))
超时值不等于“永远不关”,而是给心跳留出容错窗口,避免网络抖动误判断连。
系统级资源扩容不可跳过
Nginx 配置再优,也会被 OS 层面卡脖子:
- 修改
/etc/security/limits.conf:增加* soft nofile 1048576和* hard nofile 1048576,重启用户会话生效 - 调整内核参数:
net.core.somaxconn = 65535、net.ipv4.tcp_tw_reuse = 1、net.ipv4.ip_local_port_range = 1024 65535 - Nginx 主配置中启用:
worker_rlimit_nofile 1048576;,events 块内设worker_connections 65535;
uWebSockets、Tomcat、Spring Boot 等后端同样依赖文件描述符上限,部署前务必验证 ulimit -n 输出是否达标。










