javascript - 服务器端事件 + 客户端事件与 Websocket

标签 javascript jquery sockets

我正在更新一个过去使用 ajax 轮询机制的旧系统。该脚本会定期调用后端以查找更新,用户很少会发出 ajax 请求来发送数据。我首先想使用 Web Sockets,因为我可以立即从推送事件中获取数据,并且因为连接保持打开状态。然后我阅读了有关服务器端事件的信息,以及它是如何定向的。这正是我所需要的,因为浏览器只是在等待事件。但是,在极少数情况下用户可以发送数据。是否有服务器端事件的替代方案,我可以在其中保持连接打开以将数据发送回服务器?使用 SSE + AJAX、SSE +(替代方式)还是仅使用 Web 套接字(即使很少将数据发送回服务器)更好?

谢谢

最佳答案

This is the best explanation for SSE and its flexibilty

服务器发送的事件与 WebSockets

为什么选择服务器发送事件而不是 WebSockets?好问题。

SSE 一直处于阴影中的一个原因是因为后来的 API(如 WebSockets)提供了更丰富的协议(protocol)来执行双向、全双工通信。拥有双向 channel 对于游戏、消息传递应用程序以及需要双向近乎实时更新的情况更具吸引力。但是,在某些情况下,不需要从客户端发送数据。您只需要来自某些服务器操作的更新。一些例子是 friend 的状态更新、股票代码、新闻提要或其他自动数据推送机制(例如更新客户端 Web SQL 数据库或 IndexedDB 对象存储)。如果您需要向服务器发送数据,XMLHttpRequest 永远是您的 friend 。

SSE 通过传统 HTTP 发送。这意味着它们不需要特殊的协议(protocol)或服务器实现即可工作。另一方面,WebSockets 需要全双工连接和新的 Web Socket 服务器来处理协议(protocol)。此外,Server-Sent Events 具有 WebSockets 在设计上缺乏的各种功能,例如自动重新连接、事件 ID 和发送任意事件的能力。

我已经使用 sse 和 ajax 为我的站点构建了一个聊天应用程序。如果只有流更新并且从客户端到服务器的更新很少,我建议 sse + ajax 是一种方式,因为您可以使用 ajax 部分

我发现的唯一问题是它缺乏跨浏览器的支持。如果您想更深入地了解 sse,请具体询问您想要什么

Browser Support List

关于javascript - 服务器端事件 + 客户端事件与 Websocket,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37199513/

相关文章:

javascript - 在相对于容器 div 的文本顶部堆叠 div

javascript - 在 Angular 中,如何在 http get 返回结果对象之前操作它们?

javascript - 如何在javascript函数调用和页面刷新时取消绑定(bind)onbeforeunload事件

jquery - 如何将回调附加到附加到延迟对象的延迟对象?

jquery - $ 和 $() jQuery

python - 使用 SOCK_STREAM 代理处理 https 请求

javascript - 将元素添加到 body 后运行 javascript

javascript - 如何在 materialize CSS 中控制自动打开 Datepicker?

C++ Winsock编程,没有收到HTTP协议(protocol)的响应

sockets - 服务器不发送 SYN+ACK