连接建立后断开,与握手失败是不同的问题。本教程用两轮受控观察对比“完全空闲”和“按应用协议交换消息”,帮助缩小原因;工具不会自动重连或自动发送心跳。
建立一次基线连接
使用自己的 WSS 测试地址。确认 OPEN 后停止发送消息,记录打开时间、最后收到消息的时间和断开时间。不要仅记录“过了一会儿”。
第 1 轮:OPEN → 保持空闲 → 记录 close
记录字段:code、reason、是否正常关闭、持续时间正确理解关闭码
正常关闭常见 1000。1006 表示浏览器观察到没有正常 Close 帧的异常关闭,不能直接等同于超时、鉴权失败或服务器崩溃;协议端点不能把 1006 作为 Close 帧状态发送。
按服务协议做第二轮对照
如果服务明确支持下面的应用层 ping 消息,可手动定期发送,并观察服务是否真的回复。发送文本 ping 不是 WebSocket 协议控制帧;浏览器 WebSocket API 不开放直接发送协议 Ping 帧的接口。
{"type":"ping","id":"probe-1"}对照代理和服务日志
若空闲时稳定断开、双向交换消息时保持连接,优先核对代理读超时及服务空闲策略。仍需用日志确认;仅向上游发消息不保证重置等待上游数据的读超时。记录是否收到回复,不只看点击了发送。
心跳不能只看发送成功
发送按钮成功只表示消息进入发送流程,不保证业务已处理。服务若不认识示例 JSON,就不会给预期回应。工具当前没有自动心跳,长时间观察请使用目标服务支持的正式客户端或测试脚本。
断线后重试的注意事项
应用需要自动重连时,设置退避、随机抖动和次数或时长上限,认证或策略拒绝时不要无限重试。恢复连接后订阅状态和最后处理事件需要由应用协议恢复,不能默认旧连接状态还在。
代理依据
Nginx 的代理读超时针对上游数据读取间隔;应核对自己的配置和版本。不要把全局调大超时当作所有断线问题的修复。
浏览器与工具限制
测试工具由当前浏览器直连目标服务,需要你拥有可测试的 WSS 端点。它不代理连接、不提供任意握手请求头,也没有自动重连或自动心跳。URL 示例均是占位符;只有目标服务支持示例应用消息时,才能期待相应回应。
- 1006 是异常关闭现象,不是具体诊断。
- 区分应用层心跳消息和协议 Ping 控制帧。
- 用双向消息与日志验证空闲超时假设。