什么是 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