【问题标题】:Unable to understand GraphQL Subscriptions using ActionCable with graphql-ruby gem无法理解使用带有 graphql-ruby gem 的 ActionCable 的 GraphQL 订阅
【发布时间】: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?

【问题讨论】:

    标签: ruby-on-rails ruby graphql graphql-subscriptions graphql-ruby


    【解决方案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 广播。
    猜你喜欢
    • 2021-06-26
    • 2020-11-17
    • 2020-02-12
    • 2021-01-19
    • 2022-09-29
    • 2022-12-12
    • 2020-10-18
    • 2021-09-11
    • 2017-09-01
    相关资源
    最近更新 更多