如何使用 Server-sent Events 和 GraphQL 实现实时数据查询

阅读时长 9 分钟读完

在现代 Web 应用程序中,实时数据查询已经成为了必不可少的功能。如果你正在构建一个需要实时更新数据的应用程序,那么你需要一种可靠的方式来传递数据和事件。在这种情况下,Server-sent Events 和 GraphQL 是两种非常有用的技术。

什么是 Server-sent Events?

Server-sent Events 是一种 HTML5 技术,用于在客户端和服务器之间建立实时连接。它允许服务器向客户端推送数据,而无需客户端发送请求。这使得实时数据查询变得更加容易和高效。

Server-sent Events 使用一个长连接来保持客户端和服务器之间的连接,从而允许服务器向客户端推送数据。当客户端接收到数据时,它可以执行任何必要的操作,例如更新 UI 或执行其他操作。

什么是 GraphQL?

GraphQL 是一种查询语言和运行时环境,用于构建 Web 应用程序中的 API。它允许客户端明确地请求需要的数据,而无需获取整个数据集。这使得数据查询更加高效和可靠。

GraphQL 使用一个单一的端点来处理所有的数据请求,从而简化了数据查询的过程。它还提供了一种灵活的方式来定义数据模型和查询语言,使得应用程序更加易于维护和扩展。

如何使用 Server-sent Events 和 GraphQL?

使用 Server-sent Events 和 GraphQL 实现实时数据查询需要以下步骤:

  1. 在服务器上配置 Server-sent Events 和 GraphQL。
  2. 在客户端上实现 Server-sent Events 和 GraphQL。
  3. 编写 GraphQL 查询来获取数据。
  4. 使用 Server-sent Events 推送数据到客户端。

在服务器上配置 Server-sent Events 和 GraphQL

要在服务器上配置 Server-sent Events 和 GraphQL,你需要一个支持这些技术的服务器。有许多不同的服务器可以使用,例如 Node.js 和 Apache。

在这个例子中,我们将使用 Node.js 和 Express 来实现服务器端。首先,我们需要安装以下依赖:

然后,我们可以编写以下代码来配置服务器:

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

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

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

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

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

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

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

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

这个代码片段定义了一个包含一个查询和一个订阅的 GraphQL schema。查询返回一个字符串 "Hello world!",而订阅定期发送一个 "Hello, world!" 字符串。我们还将 Express 应用程序绑定到端口 4000,并将订阅服务器绑定到路径 /subscriptions。

在客户端上实现 Server-sent Events 和 GraphQL

要在客户端上实现 Server-sent Events 和 GraphQL,你需要一个支持这些技术的浏览器。大多数现代浏览器都支持 Server-sent Events 和 GraphQL。

在这个例子中,我们将使用 JavaScript 和 Apollo Client 来实现客户端。首先,我们需要安装以下依赖:

然后,我们可以编写以下代码来配置客户端:

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

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

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

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

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

这个代码片段定义了一个 Apollo Client,它使用 HTTP 和 WebSocket 链接来连接到服务器。我们还使用了 subscriptions-transport-ws 库来实现 WebSocket 链接。

编写 GraphQL 查询来获取数据

要编写 GraphQL 查询来获取数据,你需要了解 GraphQL 查询语言和数据模型。GraphQL 查询语言允许你明确地请求需要的数据,而数据模型定义了数据的结构。

在这个例子中,我们将编写一个查询来获取服务器端的 hello 字符串。我们可以使用 Apollo Client 的 useQuery 钩子来执行查询:

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

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

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

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

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

这个代码片段定义了一个查询,它获取服务器端的 hello 字符串。我们还使用了 Apollo Client 的 useQuery 钩子来执行查询,并根据查询状态显示相应的 UI。

使用 Server-sent Events 推送数据到客户端

要使用 Server-sent Events 推送数据到客户端,你需要了解 Server-sent Events 的 API 和事件模型。Server-sent Events API 允许你建立和维护与服务器的长连接,并在服务器推送数据时触发事件。

在这个例子中,我们将编写一个使用 Server-sent Events 推送数据的组件。我们可以使用 EventSource API 来建立连接,并在服务器推送数据时触发 events:

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

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

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

这个代码片段定义了一个组件,它使用 EventSource API 来建立连接,并在服务器推送数据时触发 events。我们还使用了 useState 钩子来更新组件的状态。

结论

使用 Server-sent Events 和 GraphQL 实现实时数据查询是一种非常有用的技术。它允许你建立可靠的连接,并在服务器推送数据时触发事件。如果你正在构建一个需要实时更新数据的应用程序,那么你应该考虑使用 Server-sent Events 和 GraphQL。

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

纠错
反馈