javascript - 无需 Websocket 即可向浏览器异步推送消息

标签 javascript jquery python asynchronous websocket

我们有一个基于浏览器的应用程序,当前使用 websockets 从我们的服务器异步接收消息。对于 websockets,我们在服务器端使用 python autobahn,在客户端使用 javascript/jQuery。如果 websocket 连接由于某种原因失败,我们还会自动故障转移到长轮询。当我们的应用程序频繁收到来自服务器的消息时,所有这些都有意义。

但是,我们的基础设施正在发生一些变化,现在我们预计很少会收到消息。唯一的问题是我们希望以尽可能少的延迟接收这些消息(这意味着长轮询只是勉强可取)。如果我们打开一个 websocket 并保持其打开状态,但大多数时候没有任何操作,那么我们就会浪费资源,并且被迫发送保持事件消息来保持 websocket 打开。

那么,除了 websocket 之外,我们是否还可以考虑其他一些不错的异步消息传递技术呢?是否有一些技术可以在客户端使用(希望在 Javascript 或 jQuery 中)可以监听来自服务器的偶尔消息并做出相应响应,而不使用 websockets?

最佳答案

恐怕不行。

Server Sent Events ,但它没有在 retarded browsers 中实现。因此,您唯一安全的选择是长轮询。

WebSocket 协议(protocol)定义 ping and pong frames 。 Ping 帧可以短至 2 个字节,而 pong 则为 6 个字节(2 个字节用于 header ,4 个字节用于 key ),因此开销并不大。如果您的服务器发送 ping 帧,Chrome 将使用 pong 帧进行响应。我编写了一个 WebSocket 服务器,这就是我保持连接事件并检测半打开连接的方式。

干杯。

关于javascript - 无需 Websocket 即可向浏览器异步推送消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22945872/

相关文章:

jquery - 透明的 jQuery UI 对话框

javascript - 如何使用datatables(jquery datagrid plugin)实现全选删除功能?

python - 正则表达式 - 匹配可选组

python - 从字符串中解析始发城市/目的地城市

javascript - 将点击方法分配给变量

javascript - 如何显示 Firebase 存储中的图像而不在循环中重复图像

javascript - Node.js 与 Graphql

javascript - 从N个这样的div中过滤时如何重新初始化一个div位置

部分匹配的 Python 列表查找

javascript - 如何添加外部链接到 react-bootstrap Navbar?