无需WebSocket的异步推送消息到浏览器

2 投票
1 回答
1010 浏览
提问于 2025-04-18 01:54

我们有一个基于浏览器的应用程序,目前使用websockets从服务器异步接收消息。在服务器端,我们用的是Python的autobahn,而在客户端则是JavaScript/jQuery。如果websocket连接因为某种原因失败,我们还设置了自动切换到长轮询。这一切在我们的应用频繁接收服务器消息的时候是很合理的。

不过,现在我们的基础设施有些变化,我们预计接收消息的频率会变得很低。唯一的要求是,我们希望尽可能减少接收这些消息的延迟(这意味着长轮询的效果就不太理想)。如果我们打开一个websocket并保持它处于打开状态,但大部分时间都没有消息通过,那就浪费资源了,而且还得发送保持连接的消息来维持这个websocket的开启。

那么,除了websockets,还有没有其他不错的异步消息技术可以考虑?有没有什么技术可以在客户端使用(希望是JavaScript或jQuery),能够监听服务器偶尔发送的消息并作出相应的反应,而不使用websockets?

1 个回答

0

我很遗憾地说,不行。

有一种叫做服务器推送事件的技术,但在一些不太先进的浏览器中并没有实现。所以你唯一安全的选择就是使用长轮询。

WebSocket协议定义了ping和pong帧。Ping帧可以非常短,只有2个字节,而pong帧则是6个字节(2个字节是头部,4个字节是关键部分),所以开销并不大。如果你的服务器发送一个ping帧,Chrome浏览器会用一个pong帧来回应。我写了一个WebSocket服务器,这就是我保持连接活跃和检测半开连接的方式。

祝好。

撰写回答