服务器端推送技术:Server-sent Events 使用详解

阅读时长 3 分钟读完

什么是 Server-sent Events?

Server-sent Events (SSE),又称为事件源 (EventSource),是一种服务器端推送技术,与 WebSocket 类似。它通过一种简单的文本协议,允许服务器向客户端推送数据,而不需要客户端持续不断地发起请求。

SSE 的优点在于它不需要像 WebSocket 那样打开一个全双工通道,从而降低了网络和服务器的负载。它只需要在客户端注册一组事件监听器,然后通过 Web 浏览器的内建机制,自动接收服务器端发来的数据。

SSE 的兼容性非常好,它可以在所有现代浏览器中使用,并且可以在不同的平台之间进行通信。

如何使用 Server-sent Events?

SSE 的使用非常简单,只需要在服务器端发送一个特定格式的消息,然后在客户端注册一个事件监听器即可。

以下是一个使用 SSE 的示例,可以在 Web 服务端上运行:

服务器端代码

-- -------------------- ---- -------
--- ---- - ----------------

------------------------------- ---- -
  ------------------ -
    --------------- --------------------
    ---------------- -----------
    ------------- ------------
  ---

  ---------------------- -
    ---------------- - - --- ---------------- - --------
  -- ------
----------------

客户端代码

-- -------------------- ---- -------
--- ------ - --- -----------------------

------------------------------- --------------- -
  ------------------- -------------
---

---------------------------------- --------------- -
  --------------------- -------- - - ------------
---

-------------------------------- --------------- -
  ------------------ ---- -------------
---

上面的代码创建了一个 Web 服务端,通过 setInterval 函数每秒向客户端推送一个包含当前时间戳的数据。客户端使用 EventSource 对象注册了一个事件监听器,当连接打开时,会输出 "Opened connection",每次接收到数据时,会输出 "Received message" 并显示当前时间戳,出现连接错误时,会输出 "Error with connection"。

Server-sent Events 的优缺点

优点

  • SSE 是一种轻量级技术,不需要像 WebSocket 那样打开全双工通道,因此对服务器和网络负载较小。
  • SSE 适合需要向客户端推送少量数据的场景,例如实时通知、实时数据更新等。
  • SSE 使用简单,兼容性好,可以在所有现代浏览器中使用。

缺点

  • SSE 需要在客户端打开长连接,虽然相对于轮询或 WebSocket 来说,其连接保持的时间更短,但可能会占用客户端过多的资源,导致部分老旧浏览器出现问题。
  • SSE 不支持二进制数据的传输,只能传输文本。
  • SSE 没有提供客户端与服务端交互的机制,只能由服务器端向客户端推送数据。

总结

Server-sent Events 是一种简单实用的服务器端推送技术,可以帮助我们实现实时通知和实时数据更新的功能。它不需要像 WebSocket 那样打开全双工通道,减少了服务器和网络的负载。使用 SSE 非常简单,兼容性好,可以在更多的场景中使用。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64f048bdf6b2d6eab3a4334d

纠错
反馈