日志写着 WebSocket 1006,怎样区分本地异常与对端关闭码
WebSocket的1006是用于本地表示异常关闭的保留状态码,不能放进Close帧发送。日志出现1006,通常只能说明没有按期望收到正常关闭信息,不能凭它断言是服务器主动踢人、网络断了或鉴权失败。应把客户端观察、线上的Close帧和服务端日志并列,分别标明证据来源。
环境和证据范围
本文只分类离线关闭记录,不抓包、不测试浏览器触发条件。1000表示正常关闭,1008表示策略违反,但具体策略原因仍要服务端说明;代码不是全部故障根因。反向代理、进程崩溃和连接被中断都可能造成客户端看到异常关闭。
核对顺序
-
先确认日志的code来自浏览器close事件、服务端库回调还是抓包。它们不是同一层:本地观察1006不表示网络里真的传输了1006。字段命名应带observed或wire,避免后续误读。
-
保存code、reason、wasClean以及最后一条成功业务消息时间,若能获得抓包,再检查是否出现Close控制帧及双方关闭握手。reason可能含敏感信息,留存前做脱敏。
-
用合法线上1000、线上1008、本地1006无Close帧三类记录测试分类器。再加入“抓包称线上发送1006”的反例,应报告非法证据或实现问题,不能把它当合法关闭原因。
-
对1006进一步关联代理日志、进程退出和网络时间线。只改重连间隔可能暂时恢复连接,却不能解释中断来源;定位完原因再决定是否调整保活、代理超时或业务鉴权。
可复算的输入与预期
附件四条结果为“对端正常关闭证据”“对端策略关闭证据”“本地异常,根因未定”“线上保留码异常”。其中1008只能提供策略层方向,不能具体推断是令牌过期。脚本逐条核对证据来源,不建立真实WebSocket连接。
下载与现场记录
下载本题合成输入与预期JSON、离线只读核验脚本和现场空白记录CSV。放在同一目录,用 Python 3 运行 python verify.py,逐项计算或解析后与预期比较,失败会显示差异。
现场字段包括 evidence_source、close_code、reason_redacted、was_clean、wire_close_seen、server_log_path。合成样例保持原样,实测另存并填写型号、版本、证据路径,未采集处留空。本地核验不代表真实设备、代理、浏览器或长期稳定性已测。
失败分支与移交
不要主动调用close(1006)来复现网络异常;它不是可发送码,库可能直接拒绝。没有Close帧也不等于服务端故意丢弃,抓包点可能遗漏数据。wasClean为真同样不保证最后一条业务操作完成,动作结果仍要独立回读和关联。
交接给运维时列出能收集的三类证据、日志保存时长与时间同步方式,保留服务端实例和客户端版本。现场暂时只有浏览器日志时,应把结论写为“异常关闭,待定位”,不要在工单里写死网络或设备故障,避免下一班沿错误方向排查。
基础背景可看WebSocket 实时控制协议科普(RFC 6455)。若关闭前出现文本编码错误,可进一步核对WebSocket 收到二进制却当字符串,怎样核对 UTF-8 解码边界。更多资料在设备协议库。
需要接入中控时,可对照SoftControl设备联动需求核实适配范围;独立校验方法是否纳入交付需逐项约定。
一级资料
核对日期:2026-10-24。规范定义与本文应用约定分开,示例门限及脚本不自动代表产品原生能力。
相关阅读
留言讨论
评论发布后会被人工复核,违规内容将被删除。
如果发表没有反应,可以前往联系我们告诉我们。