javascript

GraphQL subscriptions для real-time приложения

  • четверг, 4 мая 2017 г. в 03:15:03
https://habrahabr.ru/post/327941/
  • Node.JS
  • JavaScript


GraphQL subscriptions — это крутая возможность GraphQL сделать real-time приложение за считанные минуты.

Facebook в релиз GraphQL не стал вносить подписки. Эту проблему решила команда Apollo.

Продолжайте знакомство с GraphQL subscriptions, если уже знаете основы GraphQL.

Простой пример реактивности вы уже видели в начале статьи. Чтобы самостоятельно его повторить, установите и запустите репозитории.

Подписки GraphQL — это просто:

Предположем, у вас есть аккаунт Twitter и вы подписаны на Илона Маска. Когда у него появляется новая запись, вы ее читаете в первых рядах, в своей новостной ленте.

Подписки GraphQL работают аналогично и более масштабно. Вы подписываетесь на любое событие, которое запустит мутация.



Queries и mutations работают по HTTP каналу и только subscriptions через web sockets.

Web sockets — это транспорт, который позволяет быстро обмениваться данными между клиентом и сервером.

Механизм подписок работает через PubSub или publish & subscribe.
PubSub — это буфер, в который помещается новое событие с определенным именем.

Так, в методе мутации resolve объявляется pubsub. Когда запустится мутация, pubsub получит новое событие, а подписка с точно таким же именем, его перехватит и что-то выполнит.

GraphQL subscriptions = GraphQL queries. Это тоже самое поле GraphQL,
которое будет выводить данные. Единственное их различие в том, что queries запускаются от рендеренга страницы на клиенте, а subscriptions от активации mutations.

Мы закончили. Для получения большей информацией, можете обратиться к оффициальным источникам:


Сегодня вы познакомились с подписками GraphQL, который позволяет сделать приложение “живым”. Пример можно доработать:

  • добавить собеседника или сделать групповой чат
  • реализовать GPG шифрование сообщений
  • и многое другое

Если у вас имеются вопросы или пожелания, я с удовольствием отвечу в комментариях.

Спасибо за внимание.