【问题标题】:Server Side Events + Client Side Events vs Websocket服务器端事件 + 客户端事件与 Websocket
【发布时间】:2023-03-20 16:45:02
【问题描述】:

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

谢谢

【问题讨论】:

  • 你不需要打开一个连接来与服务器对话,ajax 会按需插入。
  • 我以为 AJAX 打开了 HTTP 连接?
  • 确实如此。您最多可以有 4 个访问任何服务器,8 个在较新的浏览器中...

标签: javascript jquery sockets


【解决方案1】:

This is the best explanation for SSE and its flexibilty

服务器发送事件与 WebSockets

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

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

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

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

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

Browser Support List

【讨论】:

    【解决方案2】:

    由于您的使用主要是服务器推送到客户端,我建议将 Server-Sent 事件组合用于从服务器推送到客户端,反之则使用 AJAX。

    您绝对应该阅读这篇文章来做出决定:

    http://streamdata.io/blog/push-sse-vs-websockets/

    这将为您提供使用服务器发送事件与 WebSocket 的优缺点。

    【讨论】:

    • 我以前看过那篇文章,还不错。我希望得到一些“大师”的答案;)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-29
    • 1970-01-01
    • 2017-04-08
    • 2012-01-29
    • 1970-01-01
    相关资源
    最近更新 更多