npm 包 add-graphql-subscriptions 使用教程

阅读时长 4 分钟读完

介绍

add-graphql-subscriptions 是一个 npm 包,它为基于 GraphQL 的应用程序添加了实时数据更新的功能。它支持使用不同的传输协议(如 WebSocket 和 MQTT),而无需重新构建应用程序。本文将向您介绍如何使用 add-graphql-subscriptions。

安装

您可以使用 npm 或 yarn 安装 add-graphql-subscriptions:

用法

1. 初始化 PubSub 消息传输对象

PubSub 消息传输对象是 add-graphql-subscriptions 中的一个类,它提供订阅、发布和取消订阅功能。在使用 add-graphql-subscriptions 之前,您必须初始化 PubSub 对象:

2. 添加 SubscriptionResolver

SubscriptionResolver 是一个与 GraphQL 查询和变异类似的对象,它定义了如何订阅和返回数据。下面是一个简单的 SubscriptionResolver 示例:

这个示例定义了一个名为 messageAdded 的订阅,它将订阅来自名为 MESSAGE_ADDED 的频道的所有消息。

3. 将 SubscriptionResolver 添加到 GraphQL Schema

假设您已经有了一个 GraphQL Schema,可以像这样将 SubscriptionResolver 添加到它:

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

4. 启动 WebSocket 服务器

最后,您需要启动一个 WebSocket 服务器,它将负责处理客户端的订阅和推送实时数据更新。以下是一个基于 Node.js 的 WebSocket 服务器示例:

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

上面的代码使用 subscriptions-transport-ws 包创建了一个 SubscriptionServer,它使用 schema、execute 和 subscribe 参数。然后,服务器将使用 HTTP 或 HTTPS 协议侦听 WebSocket 连接的请求,路径为 /subscriptions。

现在您已经完成了实时数据更新的设置,可以使用一个 GraphQL 客户端连接到 WebSocket 服务器,并使用订阅来监听数据更新。

总结

本文简要介绍了 npm 包 add-graphql-subscriptions 的使用方法。通过使用 add-graphql-subscriptions,您可以轻松地为基于 GraphQL 的应用程序添加实时数据更新的功能。此外,本文还提供了示例代码,以更好地指导您如何使用 add-graphql-subscriptions。

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

纠错
反馈