我正在编写一个应用程序,使用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元素后,将它们预先添加到主体中。
如果没有代码示例,我能想到的问题之一是您没有处理WebSocket PING/PONG帧,因此浏览器在某个时候认为连接处于非活动状态。
你可以试试这个:https://github.com/tavendo/AutobahnPython/tree/master/examples/twisted/websocket/ping