AsyncIterator
要求使用.next()
提取数据。但是对于websockets,我通常希望在事件发生时推送数据。我唯一能想到的是,通过使用基于拉力的方式,它们可以进行速率限制。
那么是什么叫.next()
?它是一个计时器,还是它监听发布消息,队列,然后调用.next()
直到它消耗所有队列?
这适用于实时数据,例如地图上的GPS位置吗?
看着这里仍然无法弄明白:https://github.com/facebook/graphql/blob/master/rfcs/Subscriptions.md
Apollo的GraphQL订阅回购:https://github.com/apollographql/graphql-subscriptions
答案 0 :(得分:0)
AsyncIterator
遍历EventStream
,然后使用过滤器和/或有效负载操作解析每个事件。
Payload操作可以调用另一个异步数据库请求,或者解析其他graphQL类型,这很费时间。
因此,GraphQL使用基于拉取的系统来限制解析eventStream。如果您不withFilter
使用resolves
,则除了有大量用户外,您不会在事件上遇到延迟。
GraphQL适用于低延迟数据。
来源:https://github.com/graphql/graphql-js/blob/master/src/subscription/subscribe.js#L44