请教html5的websocket无缘无故客户端主动断开原因

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请教html5的websocket无缘无故客户端主动断开原因相关的知识,希望对你有一定的参考价值。

参考技术A 能够建立链接(handshake),可是chrome的websocket在发送信息4次之后 ,会主动关闭链接。这里检查过不是服务器主动关闭,服务器没有异常。
服务器的逻辑也很简单,当建立了handshake之后,服务器不做任何操作,仅仅接受客户端发送的信息。
服务器使用了异步模型,这个和网上的代码也差不多。
而且每次都是4次之后浏览器主动关闭websocket.本回答被提问者和网友采纳

Websocket 无故断开并出现 1006 错误

【中文标题】Websocket 无故断开并出现 1006 错误【英文标题】:Websocket disconnects with 1006 error, without a reason 【发布时间】:2019-02-27 16:01:11 【问题描述】:

我正在记录我的网页游戏中的断开连接。似乎 75% 的会话与代码 1001(正常)断开连接,而 25% 的会话与代码 1006(错误)断开连接。 https://www.rfc-editor.org/rfc/rfc6455

有时我看到这个文本的错误原因:

CloudFlare WebSocket 代理重启

但是 1006 次断开连接中的大多数根本没有给出任何理由。玩家完全没有理由断开连接。这通常发生在玩家积极玩游戏时的 5-30 分钟。

我的设置有这些:

Node.js Express.js Cloudflare 数字海洋 码头工人 https://github.com/websockets/ws SSL Nginx 超时 = 3600 秒 Ping/Pong isAlive = 30s

我的问题是:

    如何更好地调试此问题? 哪些常见情况可能导致此问题?

【问题讨论】:

1006 表示连接以非正常方式关闭。当浏览器(标签?)被简单地杀死(愤怒退出?:D)时,就会发生这种情况。我不确定浏览器是否有义务在关闭时发送关闭帧(我认为不是)。即使是这样,我也很确定并非所有人都这样做。另一种情况是连接因任何原因而中断。例如,当移动设备超出网络范围时。是的,对于手机来说,这肯定会更频繁地发生。无论如何,我没有理由特别对待 1006。 这种情况发生在不应该发生的时候,比如当玩家有稳定的网络连接、没有关闭标签、正在玩、正在获胜时。 (这是一款浏览器 PC 游戏)25% 的连接会像这样消失,这听起来太多了,肯定是某个地方存在错误,我不知道下一步该尝试什么 你怎么知道用户没有关闭标签页?此外,连接上的流量有多大?是否有可能是某个代理服务器超时? 1.当我在测试时尝试关闭选项卡时,收到错误代码 1001。 2. 玩家偶尔会向我发送他们的屏幕截图和 javascript 控制台。 您确定没有任何中间服务器在 30 秒 ping 之前终止连接吗?如果是这样,那么这可能是 ISP/防火墙问题。 【参考方案1】:

此特定错误的原因是 Cloudflare 更新了其 SSL、防火墙、Nginx、物理服务器的软件或配置。

他们系统中几乎所有正在更新的堆栈都会踢出您的 websocket。您有 2 个解决方案:

    Websockets 不使用 Cloudflare 具有自动重新连接逻辑

【讨论】:

以上是关于请教html5的websocket无缘无故客户端主动断开原因的主要内容,如果未能解决你的问题,请参考以下文章

.NET 的 HTML5 WebSockets 客户端

将图像从 websocket 服务器 .NET 发送到客户端 (HTML5)

HTML5 websocket 客户端未检测到意外的服务器断开连接

HTML5新技术:SSE挑战WebSocket

HTML5 WebSocket

认识HTML5的WebSocket