无法理解使用带有 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 订阅的主要内容,如果未能解决你的问题,请参考以下文章
无法使用带有ActiveStorage image_processing gem的变体显示图像
使用带有 bootstrap-sass gem 的 Rails 4 无法让 CSS 在 Heroku 上工作
无法加载带有本机扩展的 gem:fresh 10.8、xcode 4.5、rvm