📜  HTML5 中服务器发送事件和 Websocket 的区别

📅  最后修改于: 2022-05-13 01:56:54.691000             🧑  作者: Mango

HTML5 中服务器发送事件和 Websocket 的区别

网络套接字

WebSockets 是一种复杂的技术,它允许客户端浏览器和服务器之间的实时交互式双向通信。这是通过为服务器建立一个标准方法来实现的,该方法无需先接收来自客户端的邀请就将信息传输到客户端,然后在连接保持打开的情况下允许在两者之间传输消息。在这种方法中,客户端和服务器可能有一个没有问题的双向进展对话。它是一种计算机通信技术,允许我们通过一个 TCP 连接拥有全双工通信通道。

WebSocket 连接能够向浏览器发送数据并从浏览器接收数据。聊天应用程序可能是使用 WebSockets 的基本应用程序的示例。它受到 Google Chrome、Microsoft Edge、Opera、Firefox、Safari 等网络浏览器的高度支持。

优点:

  • WebSockets 具有传输二进制数据和 UTF-8 的能力。
  • WebSockets 是双向的(允许客户端和服务器之间的通信)。
  • WebSockets 有能力检测掉线的客户端连接。
  • 浏览器支持兼容性更多的是 WebSockets。
  • WebSockets 本质上是通用的,因为它们能够处理复杂的项目。

缺点:

  • WebSocket 的设置更加复杂且任务要求更高。因为它需要大量的前期工作。
  • 早于 2011 年的浏览器不支持 WebSocket 连接。
  • 当连接终止时,WebSockets 不会自动恢复——它应该手动完成,这也是存在许多客户端库的部分原因。

服务器发送的事件

服务器发送事件 (SSE) 是一种技术,它使浏览器(客户端)能够通过 HTTP 连接从服务器接收自动更新,例如基于文本的事件数据。它是一个规范,解释了服务器在建立客户端连接后如何启动与客户端的数据传输。他们使用称为 EventSource 的 JavaScript API 向客户端发送消息更新或持续更新,以改进跨浏览器流式传输。它首先在 Opera 9 网络浏览器上实现。

SSE 通常用于向浏览器客户端发送消息更新或连续数据流。总之,服务器发送事件是指更新从服务器推送(而不是拉取或请求)到浏览器。

优点:

  • SSE 支持的浏览器有 Mozilla、Chrome 和 Safari。
  • SSE 具有自动重新连接、事件 ID 和发送任意事件的能力。
  • 通过简单的 HTTP 而不是自定义协议传输。
  • SSE 在更新状态、推送通知、新闻通讯和新闻提要等情况下最受赞赏,因为它们支持单向通信。
  • 与 WebSockets 相比,SSE 更快,更适合设置。

缺点:

  • SSE 仅限于 UTF-8,不支持双向数据通信。
  • SSE 中的浏览器支持较低。
  • SSE 在最大打开连接数方面受到限制。当打开各种选项卡时,这可能会特别痛苦,因为限制是每个浏览器并设置为非常低的数字 (6)。

WebSockets 和服务器发送事件之间的区别:

WebSockets

Server-Sent Events

  • WebSockets has the ability to transmit both binary data and UTF-8.
  • SSE is limited to UTF-8 only.
  • WebSockets are bidirectional (allowing communication between the client and therefore the server).
  • SSE is mono-directional it does not support bidirectional.
  • WebSockets are more complex and task-demanding to set up. Because it requires a ton of upfront work.
  • Compared to WebSockets, SSE is faster and more suitable to set up.
  • When connections are terminated WebSockets don’t automatically recover  – it should be done manually and is part of the reason why there are many client-side libraries in existence.
  • SSEs, come with automatic reconnection, event IDs, and the ability to send arbitrary events.
  • Browser support compatibility is more with WebSockets than SSE but browsers that are older than 2011 do not support WebSocket connections.
  • SSEs are most appreciated in the cases like updating statuses, push notifications, newsletters and news feeds because they support mono-directional communication.