GraphQL 中的实时数据查询及 WebSockets 实现

阅读时长 4 分钟读完

GraphQL 是现代化的 API 查询语言和运行时,它可以用于从服务端获取需要的数据。而当需要实时化的数据查询时,GraphQL 提供了一种便捷的方式:基于 WebSocket 的 Subscriptions。

Subscriptions 是什么?

Subscriptions 是一种 GraphQL 的查询类型,它可以用于实时订阅服务端推送的数据。Subscriptions 类型的查询与普通的 Query 和 Mutation 类型有所不同,它需要在服务端实现对应的订阅服务器,并且在客户端以 WebSocket 协议的形式连接到该订阅服务器上,以便实时接收来自服务端的数据更新。

Subscriptions 类型的查询可以让前端应用快速响应、更新用户界面,并为在多个用户之间实现实时数据传输提供基础。

GraphQL Subscriptions 的使用

为了使用 GraphQL Subscriptions,需要在客户端使用 subscriptions-transport-ws 包,它是一个 WebSocket-transport 的实现,它允许通过 WebSocket 与 GraphQL 服务器通信。

在客户端实现 Subscriptions 相关代码如下所示:

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

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

----- ------ - --- --------------
  ----- -------
  ------ --- ---------------
---
展开代码

值得注意的是,在服务端上实现 Subscriptions 需要使用 subscriptions-transport-ws 库作为 HTTP 框架的中间件。这个库可以将 WebSocket 解释为 HTTP 请求。

在服务端实现 Subscriptions 相关代码如下所示:

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

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

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

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

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

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

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

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

------------------- ----- ---- -- -- -- -
  --------------- ------ ----- -- ---------------------------------------------
  --- --------------------
    --------
    ----------
    ------- -------------
  -- -
    ------- -----------
    ----- ------------------
  ---
---
展开代码

在这个例子中,服务端实现了一个简单的 Subscription,每隔 1 秒更新一次计数器的值,并将此值作为服务端发送的更新数据。而客户端实现了一个 WebSocket 连接,以订阅该 Subscription 并接收来自服务端的计数器值更新数据。

结语

GraphQL Subscriptions 提供了一种便捷的方式,可以在服务端向客户端推送实时数据更新。而 WebSocket 是实现 GraphQL Subscriptions 的标准协议之一。在实际开发过程中,若需要利用 GraphQL 获取实时数据,可选择使用 Subscriptions,并使用对应的 WebSocket 实现进行数据传输。

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

纠错
反馈

纠错反馈