Почему подписки GraphQL используют AsyncIterator?

AsyncIterator требует извлечения данных с помощью .next(), Но с веб-сокетами я обычно хочу выдвигать данные, когда происходят события. Единственное, о чем я могу думать, это то, что при использовании pull-based они могут ограничивать скорость.

Так что зовет .next()? Это таймер, или он слушает опубликованное сообщение, ставит его в очередь, затем вызывает .next() пока не займёт всю очередь?

Подходит ли это для данных в реальном времени, таких как GPS-позиции на карте?

Посмотрел тут и до сих пор не смог разобраться: https://github.com/facebook/graphql/blob/master/rfcs/Subscriptions.md

Репозиторий подписок GraphQL от Apollo: https://github.com/apollographql/graphql-subscriptions

1 ответ

AsyncIterator перебрать EventStreamзатем каждое событие разрешается когда-нибудь фильтром и / или манипуляциями с полезной нагрузкой.

Манипуляции с полезной нагрузкой могут вызывать другой асинхронный запрос к базе данных или разрешать другие типы graphQL, что отнимает много времени.

Поэтому GraphQL использует систему, основанную на извлечении, для ограничения скорости разрешает eventStream. Если вы не используете withFilter ни resolves, у вас не будет задержки на событии, кроме как с большим количеством пользователей.

GraphQL подходит для данных с низкой задержкой.

Источник: https://github.com/graphql/graphql-js/blob/master/src/subscription/subscribe.js#L44

Другие вопросы по тегам