Server-Sent Events 及其使用案例介绍

阅读时长 4 分钟读完

服务器发送事件(Server-Sent Events)是一种 HTTP 技术,它可以在客户端和服务器之间进行实时的双向通信。客户端可以从服务器实时接收数据,而不是通过轮询或长轮询等方式去获取。这种技术在前端开发中非常常见,它可以用来实现推送通知、聊天室、实时看板等高级功能。

Server-Sent Events 如何工作

在向客户端发送数据时,服务器使用 text/event-stream 格式。这个格式支持多个事件流,每个事件流都有自己的事件标识符和数据。客户端可以通过新建一个 EventSource 对象来监听服务器端的事件流,当有新的事件流到达时,就会触发 EventSource 对象的 onmessage 事件,从而实现实时通信。

实现 Server-Sent Events 的代码示例

下面是一个使用 Node.js 和 Express 实现 Server-Sent Events 的代码示例。

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

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

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

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

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

上面的代码中,我们使用 Express 框架创建一个服务器,然后在 /stream 路由上发送数据。我们设置了 Content-Type 为 text/event-stream,这是 Server-Sent Events 所需要的格式。

创建的事件流每秒会发送一次数据,数据中包含了一个事件标识符 id 和实时时间。当我们在浏览器端监听 /stream 路由时,它就可以收到这些数据并在控制台输出。下面是一个监听 /stream 路由的代码示例:

我们新建了一个 EventSource 对象并监听 /stream 路由,当服务器发送数据时,我们就会收到这些数据并输出到控制台。

Server-Sent Events 的应用

例如使用 Server-Sent Events 实现一个实时看板。我们可以编写一个类似于如下的代码,不断地将系统的实时数据发送到客户端,以便实时查看当前系统的状况。

Server-Sent Events 也能用于实时的聊天室。当一个用户发送新消息时,服务器可以实时把这些消息发布给其他用户,这样其他用户就可以实时地看到新消息。这些在传统的 HTTP 请求中很难实现。Server-Sent Events 利用 HTTP 的长连接机制,在不额外发送请求的情况下实现实时通信,不会占用过多的网络资源。

总结

Server-Sent Events 是一种非常实用的技术,它可以在客户端和服务器端之间实现实时通信,而不需要像传统的 HTTP 请求那样频繁地发送请求。它的应用场景非常广泛,例如实时看板、聊天室和实时数据展示等。在实际的前端开发过程中,我们可以根据业务需求来选择合适的实时通信方式,以便提高页面的响应速度和用户体验。

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

纠错
反馈