Websocket vs SSE(Server-Sent Events)

发布时间 2023-10-13 18:06:22作者: simonbaker

定义

Websockets 和 SSE(服务器发送事件)都能够将数据推送到浏览器,但它们不是竞争技术。

Websockets 连接既可以向浏览器发送数据,也可以从浏览器接收数据。可以使用 websockets 的应用程序的一个很好的例子是聊天应用程序。

SSE 连接只能向浏览器推送数据。在线股票报价或 Twitter 更新时间线或提要都是可以从 SSE 中受益的应用程序的很好示例。

在实践中,由于 SSE 可以完成的所有事情也可以通过 Websockets 完成,因此 Websockets 得到了更多的关注和喜爱,并且比 SSE 支持 Websockets 的浏览器更多。

但是,对于某些类型的应用程序来说,它可能有点矫枉过正,而且后端可能更容易使用 SSE 等协议来实现。

此外,SSE 可以被 polyfill 到不支持它的旧浏览器中,这些浏览器只使用 JavaScript。可以在Modernizr github 页面上找到 SSE polyfill 的一些实现。

缺点

  • SSE 受到最大打开连接数的限制,这在打开各种选项卡时会特别痛苦,因为每个浏览器的限制设置为非常低的数字 (6)。该问题已在Chrome和Firefox 中标记为“无法修复” 。此限制是针对每个浏览器 + 域的,这意味着您可以在所有选项卡上打开 6 个 SSE 连接,并打开www.example1.com另外 6 个 SSE 连接www.example2.com(感谢 Phate)。
  • 只有 WS 可以传输二进制数据和 UTF-8,SSE 仅限于 UTF-8。(感谢 Chado Nihi)。
  • 一些具有数据包检查功能的企业防火墙在处理 WebSockets(Sophos XG Firewall、WatchGuard、McAfee Web Gateway)时遇到问题。

优点 

详情请查看: Websocket vs SSE(Server-Sent Events)