问题标签 [graphql-subscriptions]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1144 浏览

python - 使用 Graphene 和 Python 的订阅类示例

我试图弄清楚如何使用 graphene-python 在我的模式中正确定义订阅。到目前为止,我已经实现了查询和突变,但是你如何定义一个Subscription类?

以下是我最初的想法:

有人可以提供一个小例子吗?任何帮助将不胜感激!谢谢 :)。

布赖恩

0 投票
1 回答
718 浏览

graphql - 使用带有 React 和 Apollo 的 graphql 订阅制作实时应用程序

我正在使用 React、Apollo 和 GraphQL 构建一个实时应用程序。我的计划是组件将发出查询,然后依赖订阅来保持客户端缓存与后端数据实时一致。但是,我不相信这会起作用,因为在卸载组件时我将不得不取消订阅。当组件再次挂载时,结果将从查询缓存中获取,因此它们实际上会过期,因为在订阅关闭后发生的所有更改都将丢失。再次打开订阅也意味着结果将变得一团糟,因为两者之间的更改已丢失。

例如,在组件 A 中,如果我有疑问:-

和订阅:-

查询在customersA 首次挂载时运行。结果被缓存。客户数据的所有更改都在订阅的帮助下记录下来customersUpdated。请注意,订阅不会返回所有客户,而只会返回需要合并到查询缓存中的更改。卸载 A 时,我取消订阅。假设另一个用户对客户数据进行了 5 次更改,而 A 为我们当前的用户保持卸载状态。当 A 再次挂载时,这 5 个更改已丢失,查询只是从缓存中获取结果。订阅再次开始,但现在数据处于错误状态,因为我们错过了这 5 个更改并且永远不会得到它们!

在这里使用订阅的正确模式是什么?我试图避免使用查询进行基于时间的重新获取,因为我希望应用程序实时工作。同样是实时的,我只想提取更改而不是不必要地提取所有数据。

0 投票
1 回答
304 浏览

apollo - Apollo:客户端订阅代码?

这是我的 Apollo 订阅客户端代码,基于 Githunt-React-master 示例代码:

我的订阅解析器没有被调用。也就是说,debugger放置在其中的语句永远不会停止程序执行。

我错过了什么?

提前感谢所有人提供的任何信息。

0 投票
3 回答
2265 浏览

aws-lambda - 无服务器 GraphQL 订阅

我最近开始使用 GraphQL,并且能够成功地将其设置在 AWS Lambda 上,从而为我提供了一个“无服务器”架构。但是,我想利用 GraphQL 订阅来获得更多实时功能。

我了解 AWS Lambda 不允许使用 WebSocket,因为连接仅在函数运行或达到超时限制时才会持续。

但是有没有办法设置 GraphQL 后端,以便它可以利用订阅并将其保留在 AWS 服务中,并让它像“无服务器”应用程序一样扩展。

比如使用 AWS Lambda 进行 GraphQL 查询和突变,然后使用不同的 AWS 服务进行 GraphQL 订阅。

0 投票
1 回答
1380 浏览

javascript - 阿波罗订阅不起作用

我有一个 graphql 服务器,我试图在实体状态更新时触发一个事件。我有一个用于更新实体的突变,用于graphql-subscriptions发布更新以供订阅者收听。但是,pubsub.subscribe(EVENT_NAME)选择了更改,但是当我将其集成到订阅解析器中时,它不会触发更新。

为简洁起见,我已经编辑了与问题无关的部分代码。

我的解析器:

我的存储库:

我的架构:

为了测试这一点,我只使用了 graphiql,它可以很好地拾取 websocket 连接。

我已经尝试同时使用article(如图所示)和发布{ updatedStatus: article },但似乎都没有被采纳。

如前所述pubsub.subscribe('updatedStatus'),确实获得了变化。所以这个问题似乎与订阅解析器有关。

我要关闭以下文档:http ://dev.apollodata.com/tools/graphql-subscriptions/setup.html#setup

0 投票
0 回答
132 浏览

reactjs - GraphQL:添加对模式的订阅

我正在尝试使用 GraphQL 和 Relay 设置订阅。我有以下突变,它增加了一个新团队:

这工作正常,但我似乎无法弄清楚如何让我的订阅至少在 GraphiQL 中工作。我的架构中有以下定义:

我不确定如何构建订阅功能,并且似乎找不到足够的文档。当我在 GraphiQL 中运行以下命令时,

我收到以下错误:

Cannot query field team on type Subscription.

谢谢大家的帮助!

0 投票
2 回答
3556 浏览

graphql - Apollo GraphQL 服务器;设置上下文以处理由触发订阅触发的请求

我了解在创建 GraphQL 服务器时如何设置上下文对象,例如

以便在处理传入请求时将上下文对象传递给我的解析器。

但是,当解析器由订阅触发时,我没有看到此上下文对象(即客户端订阅了 GraphQL 订阅,并定义了订阅触发时要发送给它们的数据的形状);在这种情况下,上下文似乎是一个空对象。

有没有办法确保在 PubSub.publish() 调用之后调用解析器时正确设置我的上下文对象?

0 投票
0 回答
79 浏览

graphql - React Apollo 订阅绕过了 graphql 包装器

我有一个名为GraphQL Bookstore的示例应用程序,它创建书籍、出版商和作者并显示它们之间的关系。我正在使用订阅来实时显示更新。

出于某种原因,我的BOOK_ADDED订阅完全绕过了graphql包装器。它正在调用包装类,并将booksprop 设置为undefined. 代码的相关部分如下所示(您可以在此处查看完整代码)。

基本上,当客户端收到订阅通知时,updateQuery()会调用该函数 - 正如预期的那样。但是,一旦该函数退出,render()包装类的方法就会被直接调用并books设置为undefined。我预计graphql会调用包装器,在调用render()方法之前正确设置道具。我错过了什么?

提前致谢!

0 投票
1 回答
409 浏览

graphql - 订阅一个 GraphQL 项目

为我的 GraphQL 后端使用 GraphCool,我想知道如何只订阅给定 ID 的单个项目。我一直在查看文档并尝试使用过滤器,但我仍然无法弄清楚。如果我想订阅所有项目突变,我知道我必须这样做:

如何收听具有给定 ID 的项目?

0 投票
2 回答
688 浏览

react-native - 中继订阅不适用于 react-native

我正在使用带有 react native 和 Relay 的 Express Graphql 服务器。我的设备确实连接到订阅,但它没有订阅它。这是我在服务器上的 index.js

服务器上订阅的解析器,由于每个人都在使用来自 apolloGraphql 的可执行模式,因此很难弄清楚。

现在是 react-native 客户端。我的订阅设置与中继环境。

我的订阅方式,

我调用订阅的组件,

当设备启动应用程序时,我的设备连接到 Web 套接字,因为我可以在 SubscriptionServer 的 onConnect 方法中看到 console.log 语句。但是当负载在突变后发布时,订阅方法不会被调用。我似乎无法弄清楚我做错了什么。也许这是我缺少的一些 react-native 特定配置,因为当我在 graphiql 上测试它时,一切似乎都运行良好。我找不到与 express graphql 一起使用的 react-native 和中继订阅的任何示例。

注意:当我将订阅与 graphiql 一起使用时,一切正常。但不适用于 react-native 和中继。

提前谢谢各位....