使用 Server-Sent Events 实现实时流程图可视化

阅读时长 8 分钟读完

在前端开发中,实现实时流程图可视化是一个常见的需求。这种需求通常出现在需要实时展示业务流程状态的场景中,比如订单状态跟踪、物流状态跟踪等。

在本文中,我们将介绍如何使用 Server-Sent Events 技术实现实时流程图可视化。

Server-Sent Events 简介

Server-Sent Events(简称 SSE)是一种基于 HTTP 协议的实时数据传输技术。与 WebSocket 不同,SSE 是一种单向通信方式,只能由服务器向客户端发送数据,而不能由客户端向服务器发送数据。

SSE 使用了 HTTP 的长连接(long-polling)机制,即客户端向服务器发送一个 HTTP 请求,服务器在响应中保持连接打开,然后在有新数据时向客户端发送数据。这种方式相对于轮询(polling)机制来说,可以减少不必要的网络流量和服务器压力。

SSE 的优点包括:

  • 实时性好,可以在数据有更新时立即推送给客户端。
  • 简单易用,基于 HTTP 协议,无需额外的握手和协议。
  • 兼容性好,现代浏览器都支持 SSE。

实现实时流程图可视化

下面我们将介绍如何使用 SSE 技术实现实时流程图可视化。我们假设有一个业务流程,包括多个步骤,每个步骤有不同的状态(例如进行中、完成、失败等)。我们需要在前端实时展示每个步骤的状态。

服务端实现

首先,我们需要在服务端实现 SSE 接口。我们使用 Node.js 作为服务端,利用 Express 框架实现 SSE 接口。具体实现如下:

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

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

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

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

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

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

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

上述代码中,我们定义了一个 /sse 接口,返回的数据格式为 SSE 格式。在初始请求时,我们从数据库或其他数据源获取业务流程状态数据,并将其作为初始数据发送给客户端。随后,我们以固定的时间间隔定时更新业务流程状态数据,并将其发送给客户端。

sendEvents 函数中,我们将每个数据包装成 SSE 格式并发送给客户端。具体来说,我们将数据使用 JSON 格式序列化,并包装成 eventdata 字段,最后以 \n\n 结尾。

客户端实现

接下来,我们需要在客户端实现 SSE 的接收和处理。我们使用纯 JavaScript 实现 SSE 的接收和处理,具体实现如下:

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

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

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

上述代码中,我们首先创建一个 EventSource 对象,指定 SSE 的 URL。随后,我们使用 addEventListener 方法监听 update 事件,当服务端发送更新数据时,会触发该事件。在事件处理函数中,我们解析服务端发送的数据,并更新流程图状态。

另外,我们还监听了 error 事件,当连接关闭或发生错误时,会触发该事件。在事件处理函数中,我们根据事件类型输出相应的日志信息。

流程图可视化实现

最后,我们需要实现流程图的可视化。这里我们使用了 mxGraph 库,该库是一款开源的 JavaScript 图表库,支持流程图、组织结构图、时序图等多种图表类型。具体实现如下:

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

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

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

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

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

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

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

上述代码中,我们首先创建了一个 mxGraph 对象,并在其中插入了多个顶点,表示业务流程的不同步骤。随后,我们使用一个对象 stepStatus 存储每个步骤对应的顶点对象。

在 SSE 更新数据时,我们根据更新数据中的步骤和状态,找到相应的顶点对象,并更新其样式。具体来说,我们根据状态设置顶点的背景颜色,表示不同的状态。

总结

本文介绍了如何使用 Server-Sent Events 技术实现实时流程图可视化。具体来说,我们在服务端实现了 SSE 接口,定时向客户端发送业务流程状态数据;在客户端实现了 SSE 的接收和处理,解析服务端发送的数据并更新流程图状态;最后,我们使用了 mxGraph 库实现了流程图的可视化。

SSE 技术相对于轮询和 WebSocket 技术来说,具有实时性好、简单易用、兼容性好等优点,适用于一些需要实时数据传输的场景。在实际开发中,我们可以根据具体的需求选择不同的技术方案。

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

纠错
反馈