无法理解使用带有 graphql-ruby gem 的 ActionCable 的 GraphQL 订阅

Posted

技术标签:

【中文标题】无法理解使用带有 graphql-ruby gem 的 ActionCable 的 GraphQL 订阅【英文标题】:Unable to understand GraphQL Subscriptions using ActionCable with graphql-ruby gem 【发布时间】:2019-05-23 03:03:37 【问题描述】:

我正在尝试使用带有graphql-ruby gem 的 ActionCable 来实现 GraphQL 订阅。

我从link 发现需要创建 GraphQL 通道,客户端需要订阅这些通道。通常,在 ActionCable 中,我们会在 subscribed 操作中 stream_from 所需频道。但是,链接中的示例指定了带有参数的execute 方法。这个方法什么时候执行?

此外,doc 声明 See Apollo Client or Relay Modern 供客户使用。是否必须使用其中任何一种,或者我可以使用 coffeescript 来订阅和更新 UI?

【问题讨论】:

【参考方案1】:

不确定您是否已经解决了您的问题,但对于任何难以理解 GraphQL 如何与 ActionCable 配合使用的人。我已经建立了一个示例存储库,并将尝试更新文档以使其更好。

https://github.com/bidluo/GraphQL-ActionCableSubscriptions

要回答您的问题,执行就像发送消息时的任何其他 ActionCable 操作一样,因此要调用它,您将执行以下操作,其中数据包含所有内容,而查询实际上是 GraphQL 的唯一部分。


   "command":"message",
   "identifier":"\"channel\":\"GraphqlChannel\"",
   "data":" \"query\": \"subscription  newMessage  content  \", \"variables\": null, \"action\": \"execute\" "

但您需要先确保您已订阅该频道:


   "command":"subscribe",
   "identifier":"\"channel\":\"GraphqlChannel\""

【讨论】:

嗨,大卫,这很有用,但我注意到了一些事情。按照这个例子,如果我订阅 N 个不同的消费者到 newMessage,N 个查询将被触发发送完全相同的数据。这是非常低效的。你遇到过同样的情况吗? @DarioBarrionuevo 嗨,老实说,这对我来说并没有真正成功,所以我只是将所有内容都切换为使用推送通知。结果变得更容易了,因为我只需要支持推送而不是推送和套接字。不过,要回答您的问题,您可以修改 AC 通道以缓存查询而不是执行新的查询。 我向 gem 开发人员询问了这个问题,重复查询是此设置的预期行为。必须使用 GraphQL 广播。

以上是关于无法理解使用带有 graphql-ruby gem 的 ActionCable 的 GraphQL 订阅的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 graphql-ruby 订阅进行简单广播

无法使用带有ActiveStorage image_processing gem的变体显示图像

使用带有 bootstrap-sass gem 的 Rails 4 无法让 CSS 在 Heroku 上工作

无法加载带有本机扩展的 gem:fresh 10.8、xcode 4.5、rvm

graphql-ruby:Int 不是定义的输入类型(在 $first 上)

使用 graphql-ruby 实现联合类型