WebSocket 在 1000 条消息后关闭
Posted
技术标签:
【中文标题】WebSocket 在 1000 条消息后关闭【英文标题】:WebSocket closes after 1000 messages 【发布时间】:2014-11-11 20:05:59 【问题描述】:我正在编写一个应用程序,使用 WebSocket 将消息从 Apache Kafka 流式传输到浏览器。当服务器有一段时间没有消费消息并且偏移量落后时,websocket 在 1000 或 2000 条消息后关闭。每次测试运行时,数字似乎都会在两者之间交替。消息是 utf8,通常在 8 字节片段中长度约为 130-140 字节。
当偏移量被赶上并且消息以稍慢的速度进入时,它会持续更长的时间,但有时仍然会在打开一段时间后随机关闭。
在服务器端,我使用带有 Twisted 的 Autobahn,这个 kafka-python 库,以及浏览器端的原生 WebSocket 对象。在每种情况下,两端都会收到 1006 错误代码(意外关闭)。
我目前只在 RHEL 和 OSX 上使用 Firefox 31 对此进行了测试。服务器的python版本是2.6.6。升级会相当困难,所以不幸的是我不能只看一个新的 python 版本是否修复它;但是,如果这绝对是问题,它可以做到。
目前的代码非常简单——当连接打开时,服务器开始使用 Kafka 消息并将它们发送到 websocket 上。客户端在使用 jquery 将其添加到简单的 span 元素后,将它们添加到正文中。
【问题讨论】:
你有这方面的代码示例吗? 【参考方案1】:如果没有代码示例,我能想到的问题之一是您没有处理 WebSocket PING / PONG 帧,因此浏览器在某些时候认为连接处于非活动状态。
你可以试试这个:https://github.com/tavendo/AutobahnPython/tree/master/examples/twisted/websocket/ping
【讨论】:
以上是关于WebSocket 在 1000 条消息后关闭的主要内容,如果未能解决你的问题,请参考以下文章
发送几条消息后,WebSocket readyState 停留在 0
除非收到另一条消息,否则 Websocket 客户端在握手后无法发送
websocket前端发送一个消息 后端还没执行完 收不到第二条消息
传输了几条消息后,ASP.NET MVC 4.5 WebSocket 服务器失去连接