GraphQL 是一种新型的数据查询语言,它可以通过定义一个类型系统来描述数据,并提供强大的查询能力。对于实时数据的处理,GraphQL-Redis-Subscriptions 是一个非常好的解决方案。
在本文中,我们将介绍如何使用 npm 包 graphql-redis-subscriptions 来搭建一个实时数据系统,并且通过示例代码来演示其功能。
1. 安装
在使用之前,请确保已安装 Redis。
npm install graphql-redis-subscriptions --save
2. 创建 PubSub 实例
PubSub 是一种常见的模式,用来在不同的应用程序之间传递消息。在 GraphQL-Redis-Subscriptions 中,PubSub 用于实现实时订阅。创建一个 PubSub 实例很简单:
const Redis = require("ioredis"); const { RedisPubSub } = require("graphql-redis-subscriptions"); const redis = new Redis(); const pubsub = new RedisPubSub({ connection: redis, });
3. 配置 Subscription
接下来,我们需要定义 Subscription 的类型。
-- -------------------- ---- ------- ----- - ---------- - - --------------------------------- ----- - ------ - - --------------------------------- ----- - -------------------- - - --------------------------------- ----- - ----------- - - --------------------------------------- ----- ----- - --- -------- ----- ------ - --- ------------- ----------- ------ --- ----- -------- - - ---- ------------ - -------------- --------- ---- - ---- ---- - --- ---- -------- ------- - -- ----- --------- - - ------------- - -------- - ---------- ----------- -- -- --------------------------------- --------- ---------- -- - ------ ------------- --- ---------------- - -- -------- --------- ---- -- - ------ -------- -- -- -- -- ----- ------ - ---------------------- --------- ---------- ---
这里,我们定义了一个 Subscription 类型,其中包含一个名为 newPost 的订阅。我们使用 withFilter 封装 pubsub.asyncIterator("NEW_POST"),实现对指定话题的过滤。
接下来,我们来看看,如何在 Mutation 中向 Subscription 发布消息。
-- -------------------- ---- ------- ----- - ---------- - - --------------------------------- ----- - ------ - - --------------------------------- ----- - -------------------- - - --------------------------------- ----- - ----------- - - --------------------------------------- ----- ----- - --- -------- ----- ------ - --- ------------- ----------- ------ --- ----- -------- - - ---- ----- - ------ ------ -------- ------ ---- - ---- -------- - ------------------- --------- ---- - ---- ------------ - -------------- --------- ---- - ---- ---- - --- ---- -------- ------- - -- --- ----- - - - --- -- -------- ------- ------- -- - --- -- -------- ------- --------- -- -- ----- --------- - - ------ - ------ -- -- ------ ----- --- - -- -- -- ----------------- -- ------- --- ---- -- --------- - ----------- --- - ------- -- -- - ----- ---- - - --- ------------ - -- ------- -- -------------------------- - ------ ----------- ------- --- ----------------- ------ ----- -- -- ------------- - -------- - ---------- ----------- -- -- --------------------------------- --------- ---------- -- - ------ ------------- --- ---------------- - -- -------- --------- ---- -- - ------ -------- -- -- -- -- ----- ------ - ---------------------- --------- ---------- ---
当调用 createPost 的时候,我们同时也发布了一个 NEW_POST 的事件。这个事件包含了 post 的 id 和 content。
现在,我们打开 GraphQL Playground,输入以下 Mutation:
mutation { createPost(content: "Hello, GraphQL!") { id content } }
查询可以得到如下结果:
{ "data": { "createPost": { "id": 3, "content": "Hello, GraphQL!" } } }
同时,我们还可以打开一个新的窗口,输入以下 Subscription:
subscription{ newPost(topic: "NEW_POST"){ id content } }
这样我们就可以看到所有的新消息。当我们再次执行 Mutation 的时候,新消息也会立刻发布到这个 Subscription 上。
总结
在这篇文章中,我们介绍了如何使用 GraphQL-Redis-Subscriptions 这个 npm 包来实现实时订阅。我们学习了如何创建 PubSub 实例,以及如何配置 Subscription 和发布消息。掌握这些知识点,我们可以很容易地搭建一个实时数据系统,并且能够方便地处理实时数据。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/5eedae68b5cbfe1ea0610e34