为什么GraphQL订阅使用AsyncIterator?

时间:2017-12-05 23:27:24

标签: graphql apollo graphql-subscriptions

AsyncIterator要求使用.next()提取数据。但是对于websockets,我通常希望在事件发生时推送数据。我唯一能想到的是,通过使用基于拉力的方式,它们可以进行速率限制。

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

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

看着这里仍然无法弄明白:https://github.com/facebook/graphql/blob/master/rfcs/Subscriptions.md

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

1 个答案:

答案 0 :(得分:0)

AsyncIterator遍历EventStream,然后使用过滤器和/或有效负载操作解析每个事件。

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

因此,GraphQL使用基于拉取的系统来限制解析eventStream。如果您不withFilter使用resolves,则除了有大量用户外,您不会在事件上遇到延迟。

GraphQL适用于低延迟数据。

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