Server-sent Events 中的流式传输解决数据慢速传输问题

Server-sent Events 中的流式传输解决数据慢速传输问题

在 Web 应用开发中,实时数据的传输是非常重要的。传统的方式是使用 Ajax 定期向服务器发送请求,从而获取更新的数据。有一个不足之处是 Ajax 请求的反应时间通常是比较长的,这导致了用户对实时数据的获取是相对滞后的,这对于像聊天室这样的实时应用是非常不适用的。这时候,Server-sent Events (SSE) 可以帮助我们解决数据慢速传输的问题。

什么是 Server-sent Events?

SSE是一种允许服务器推送数据到客户端的 HTML5 技术,用于服务器到客户端的单向数据传输,允许服务器推送事件流(event stream)到客户端。如下示例:

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

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

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

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

上述示例是一个 SSE 的事件流,由多个具有不同类型的事件组成。每个事件的数据可以是任意格式,这取决于应用程序的需求。默认情况下,如果事件不指定类型,那么类型是“message”。

如何使用 Server-sent Events?

  1. 创建 SSE 连接

在客户端,我们可以使用 JavaScript 创建一个 SSE 连接,并为该连接添加回调函数以处理前端收到的数据。代码示例如下:

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

对于服务器端,需要按照 SSE 的标准协议向客户端发送数据,示例代码如下:

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

------------------------------- ---- -
  ------------------ -
    --------------- --------------------
    ---------------- -----------
    ------------- ------------
  ---
  
  ---------------------- -
    ---------------- - - ---------- - --------
  -- ------
  
----------------
  1. 传输事件流

在服务器端,我们可以使用任何编程语言来实现 SSE。例如,在 Node.js 中,我们可以使用“EventEmitter”来封装事件和数据:

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

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

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

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

该代码示例中,我们在“sendEventStream”函数中添加了一个事件回调函数。当处理一个“message”事件时,就会将数据发送到前端。当您系统中发生特定事件时,您可以很容易地将应用此代码作为发送的事件流。

Server-sent Events 的优势

  1. SSE 支持实时数据传输:

通过 SSE,服务器可以在任何时候向客户端发送新数据。因为客户端维持一个持久化连接,这使得 SSE 比普通的 Ajax 请求更具实时性。

  1. SSE 可以减少网络流量和服务器负载:

SSE只需要维护一个持久化连接,这使得 SSE 比多次使用普通 Ajax 请求更加高效。在采用 SSE 时,用户的浏览器会接收到服务器端发送的假定是更新于 Web 应用程序生命周期的、对可流式处理的实时数据,使得用户的使用感受更加流畅。

结论

Server-sent Events 通过单向的流式传输,使得 Web 应用程序可以获得更加实时的数据传输体验,其优点显而易见。开发人员可以使用 SSE 来建立实时性更强的应用程序,并减少网络流量和服务器负载。SSE作为第一方应用标准,其工作原理及优质特异性表明,在未来SSE将成为开发者设计极富实用性和有完善经验的Web应用的一个首选的技术。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/672d59b0ddd3a70eb6da3132