GraphQL 中的 Subscriptions 实现及最佳实践

阅读时长 6 分钟读完

GraphQL 是一种用于 API 构建的查询语言和运行时。它可以让客户端定义 API 响应的结构,从而减小了来自服务器的过量请求,提高了 API 的性能。在 GraphQL 中,Subscriptions 允许建立穿过 WebSockets 的实时连接,用于向客户端推送实时更新。

Subscriptions 的实现

GraphQL Subscriptions 由客户端和服务端两部分组成,客户端负责接收实时数据,而服务端负责推送实时数据。

客户端实现

在客户端中,使用 subscriptions-transport-ws 库,该库提供了创建 WebSockets 连接的方法。下面是一个基本的客户端实现示例:

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

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

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

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

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

服务端实现

在服务端上,首先需要创建一个 WebSocket 服务,然后使用 graphql-subscriptions 库来实现订阅和发布事件。下面是一个基本的服务端实现示例:

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

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

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

Subscriptions 的最佳实践

限制字段数量

GraphQL Subscriptions 在实时通信过程中,会发送大量的数据,因此必须有限制范围。推荐使用 withFilter 方法,在特定条件下只发送有限的数据:

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

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

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

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

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

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

使用 Redis 存储和获得相关数据

Redis 是一种高效且广泛使用的数据存储引擎,用于缓存和存储实时数据。订阅服务器可以使用 Redis 缓存/存储订阅生成的数据,以便更快地获取数据以及在缩放服务器时避免数据重复处理。

监控程序性能

GraphQL Subscription 是一个在程序性能方面需要考虑的关键区域,因此必须定期监控程序性能,以便能够解决订阅过程中可能遇到的问题。

结语

GraphQL Subscriptions 为客户端提供了实时更新功能,并通过 WebSockets 协议进行实时通信。理解了 Subscriptions 的实现和最佳实践,开发者可以更高效的创建分布式系统,并且能够更好地掌控和管理程序性能。

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

纠错
反馈

纠错反馈