【问题标题】:Why do GraphQL Subscriptions use an AsyncIterator?为什么 GraphQL 订阅使用 AsyncIterator?
【发布时间】:2018-05-19 17:56:18
【问题描述】:

AsyncIterator 需要使用.next() 拉取数据。但是对于 websockets,我通常想在事件发生时推送数据。我唯一能想到的是,通过使用 pull-based 他们可以限制速率。

那么什么叫.next()?是定时器,还是监听发布消息,排队,然后调用.next(),直到消耗完所有队列?

这是否适用于实时数据,例如地图上的 GPS 位置?

看了这里还是想不通:https://github.com/facebook/graphql/blob/master/rfcs/Subscriptions.md

来自 Apollo 的 GraphQL 订阅回购:https://github.com/apollographql/graphql-subscriptions

【问题讨论】:

    标签: graphql apollo graphql-subscriptions


    【解决方案1】:

    AsyncIterator 遍历 EventStream,然后每个事件都会在某个时候通过过滤器和/或负载操作来解决。

    payload 操作可以调用另一个异步数据库请求,或者解析其他 graphQL 类型,这很耗时。

    所以 GraphQL 使用基于 pull 的系统来限速解析 eventStream。如果您既不使用withFilter 也不使用resolves,则除非有很多用户,否则您不会延迟事件。

    GraphQL 适用于低延迟数据。

    来源:https://github.com/graphql/graphql-js/blob/master/src/subscription/subscribe.js#L44

    【讨论】:

      猜你喜欢
      • 2020-05-25
      • 2020-11-17
      • 2022-09-29
      • 2020-02-04
      • 2017-09-01
      • 2017-09-19
      • 2019-12-02
      • 2021-10-09
      • 2021-08-12
      相关资源
      最近更新 更多