← 返回博客列表

WebSocket 频繁断开:关闭码、代理方式和超时

2026-09-15 · 刺猬VPN

协作页面、行情、远程日志,加载完成后会再升一条 WebSocket。文档请求都是 200,过一会儿状态变成已断开,开发者工具里关闭码是 1006,没有干净的原因句。有的环境是 1000,表示对端正常关闭;有的是中间设备把空闲连接掐了,页面只能不断重连。

关闭码、隧道是全局网卡还是系统代理、中间盒的空闲超时,要分开。下面用浏览器里能看见的帧和客户端的连接模式来判断。不涉及绕过登录或伪造连接。

正常关闭、异常关闭和文档请求

1001 表示离开,例如关标签。1008 多与策略有关,1011 多是服务端内部错误。先把码记下来,再决定动客户端还是动服务端超时。

对比项10001006普通文档请求
含义一端正常结束异常,没收到关闭帧页面本身
常见原因服务端主动结束会话超时、重置、中间设备和长连接无关
刷新页面会再连上直到再次结束会再连上直到再次被掐一直能开
该看的地方服务端日志代理、超时、路径是否切换状态码
换节点通常无效切换瞬间必断一次可能改善打开
和登录会话到期会正常关不一定是登录401 是另一条请求

从能打开到能保持:分步操作步骤

  • 第一步:先把网络线路准备好,并在整个观察期间不要切换节点。安装刺猬VPN,自定义用户名和密码即可匿名注册,不需要邮箱、也不需要手机号。免费节点永久免费、不限流量、不限速,全程 HTTPS+AES 加密。长连接最怕路径中途改变,一换节点,当前这条必然断开。
  • 第二步:用开发者工具的网络面板筛选套接字。看是升级成功后过一段时间才断,还是升级请求本身失败。升级失败要看 HTTP 状态,不是关闭码。
  • 第三步:记下关闭码。1000 去查服务端为何结束;1006 再查超时和重置。不要把两种都当成节点慢。
  • 第四步:确认客户端用的是全局网卡模式还是系统代理。只代理浏览器时,部分桌面客户端的套接字不走代理,于是网页正常、桌面端一直断。两种模式的差别见 TUN 与系统代理。
  • 第五步:若断开伴随连接被重置,按 连接被重置 先排除重置,再回到关闭码。重置和空闲超时不是同一句日志。
  • 第六步:空闲一两分钟就断、有数据时不断,多半是中间设备的空闲超时。保持一条定时的心跳,或把服务端和反代的读超时调到长于心跳间隔。
  • 第七步:反代若用的是默认读超时,长连接会被按网页请求的秒数掐掉。把这条路径的读超时单独加长,不要把整个站点的超时都改成极短。
  • 第八步:浏览器能保持、命令行客户端不能,优先检查命令行是否继承了代理环境变量。没有继承时,它在直连,和浏览器不是一条路。
  • 第九步:观察至少覆盖两次心跳。只看前十秒都正常,说明不了空闲超时。

按关闭码和模式排查

先回答三个问题:码是多少、断的时候有没有在传数据、断的是浏览器还是另一个程序。

  • 1006 且空闲才断:中间超时。加心跳或加长读超时。换一个更远的节点通常更差。
  • 1006 且一切换节点就断:预期行为。稳定使用时不要切换。
  • 1000 且服务端日志写会话过期:重新登录。这不是隧道故障。
  • 只有系统代理时桌面端断、改成全局网卡后不断:桌面端没走代理。固定用能覆盖该程序的模式。
  • 升级请求返回 401:鉴权失败,连接没建立。修令牌或登录,不要改超时。
  • 升级返回 403:策略拒绝。看服务端是否只允许特定来源。
  • 同一页面的短请求都重置:先按连接重置那篇处理整条路径,套接字只是受害者。
  • 公司网络必断、家里不断:公司设备在掐升级或长连接。换节点若仍走公司出口,不会好。

该改客户端、反代还是别换来换去

免费节点可以用来对比「全局网卡」和「系统代理」哪一种能保持。对比时其他条件不变。时长套餐期间不限流量、不限速,方便长时间挂着观察。刺猬VPN自身不对账号设速率上限,不断开是路径稳定,不是把中间设备的超时取消。实际可用性取决于当前网络环境。

对比项固定一种模式中途换节点只加长超时
1006 空闲先确认程序走不走隧道每次都制造一次断开对中间超时有效
1000无效无效无效,要查会话
桌面端单独断改成能覆盖它的模式不覆盖就不行不解决未代理
有数据也断看重置和丢包更不稳超时不是主因
适合日常保持只在完全连不上时你能改反代时
流量心跳很小重连风暴更费无额外视频流量

心跳间隔和读超时怎么配对

心跳要比你怀疑的空闲阈值更频繁,读超时要比心跳间隔更长。例如心跳二十秒,读超时至少留到一分钟以上,避免心跳还没到就被掐。具体秒数按你的反代和托管平台上限来,托管平台若有最长请求时间,长连接不能超过那个上限。

不要把所有路径的超时都改成数小时。只给升级后的这一条加长。普通表单仍保持原来的短超时,否则卡住的请求会占住工作进程。

客户端重连要有间隔和上限。一断就立刻重连且不退避,会在服务端打出连接风暴,看起来像对方一直把你踢掉。

和网卡模式、重置的分工

程序到底走没走隧道,用 TUN 与系统代理 的区分来做实验:只改模式,不改节点,看桌面端是否还断。若一改模式就好,就不要再加长服务端超时。

日志里是连接重置而不是关闭码,先看 连接被重置。重置修好之后,若只剩空闲才出现的 1006,再加心跳。两篇都处理过仍断,才回到服务端是否主动发了 1000。

常见报错速查表

现象原因解决办法
关闭码 1006,空闲才断中间设备超时心跳,并加长读超时
一换节点就断路径变了观察期间不要切换
关闭码 1000对端正常结束查会话过期或服务端逻辑
桌面端断、浏览器不断桌面端未走代理改用能覆盖它的模式
升级 401未登录或令牌失效重新鉴权
升级 403来源或策略拒绝查服务端允许的来源
短请求也重置路径被重置先处理重置再看套接字

用一次对照实验下结论

实验只改一个量。第一次:同一节点,系统代理,记录能保持几分钟。第二次:同一节点,全局网卡,再记。第三次:若两边都是空闲才断,再在服务端把读超时加长后重测。三次都变好或都不变,结论才清楚。

把关闭码、断开前最后一条帧的时间、当时有没有切换节点,写在同一行。隔天复查时不会把登录过期和超时混成一句「不稳定」。

手机浏览器的后台限制会单独掐连接。电脑能保持、手机锁屏就断,是系统休眠,不是节点。需要手机上的客户端时,中国大陆区 App Store 不提供 VPN 类应用,在港区 App Store 搜索上架名「Hedge VPN」,见 iOS 安装教程。

把三次实验记在同一张表

表上只留四列:模式、节点有没有换、关闭码、断开前空闲了多久。第一次用系统代理,第二次改全局网卡,第三次才动超时。每一列只改一项,否则看不出是哪一项让连接保持住。

空闲时间用最后一条应用数据的时刻来算,不要用页面打开的时刻。页面打开后一直有心跳,就不算空闲。没有心跳却怪超时太短,加长超时也只是把断开推迟到下一个静默窗口。

重连次数一分钟超过几次,就先把客户端的重试间隔拉开,再谈服务端。风暴会把正常的会话也冲掉,日志里全是新连接,真正的关闭原因被淹没。

对照实验时把电脑的休眠关掉。休眠会制造一次看起来像异常关闭的断开,和中间设备超时混在一起。观察窗口里不要同时跑大文件下载,下载把队列打满时,长连接也会断,那是排队而不是关闭码本身。先让这条连接单独存在,记录能保持多久,再决定要不要加心跳。

服务端日志和浏览器关闭码对时间。浏览器写异常关闭,服务端却写正常结束,就以服务端为准去查会话逻辑。两边都是异常,才去查超时和路径。时间对不上时,先校对自己的系统时钟,差几分钟会把两次断开看成同一次。

改完超时后至少再观察一个完整的空闲周期。只看前几秒都正常,说明不了问题已经消失。把新的保持时间和改之前的那一行写在一起,确认是变长了而不是碰巧没断。仍在同一时间点断开,就说明改的那一层不是瓶颈。

高频问答

  • 问:1006 是不是被封了?答:只表示异常结束,没有关闭帧。空闲才出现时,优先怀疑超时。
  • 问:刷新就好,算修好了吗?答:不算。刷新是新的一条连接。要看它能不能跨过你原来断开的那一段时间。
  • 问:心跳越密越好吗?答:不必。密到超过中间设备的阈值即可,过密只增加无用流量。
  • 问:全局网卡和系统代理哪个更不容易断?答:看程序会不会走系统代理。不走的程序只有全局网卡能覆盖。
  • 问:免费节点能测吗?答:能。对比模式时固定同一个免费节点即可。长时间观察可用时长套餐,期间不限流量、不限速。
  • 问:能把超时改成无限吗?答:不要。只加长这一条长连接,并留出心跳。无限挂起会占住服务端进程。

先读关闭码再改配置

WebSocket 频繁断开时,先看是 1000 还是 1006,再看断的是不是空闲连接、程序有没有走隧道。路径在观察期间保持不变。超时就加心跳和读超时,模式不对就改模式,会话过期就重新登录。

刺猬VPN 支持按域名和 IP 的智能分流,也有断线保护。断线保护会在隧道意外断开时拦住直连,不能代替心跳,也不能取消中间设备的空闲策略。注册不需要邮箱和手机号。支付目前支持支付宝、微信支付和 USDT(TRC20),以支付步骤中实际显示的选项为准。实际可用性取决于当前网络环境。

开始使用刺猬VPN:免费节点即刻体验,全球会员线路

刺猬VPN提供永久免费节点,不限流量;无需邮箱,自定义用户名即可匿名注册。一个账号支持多设备同时在线,实际可用性取决于当前网络环境。