Подписки Apollo - обработка разрыва соединения WS с subseToMore - PullRequest
0 голосов
/ 19 февраля 2019

Я искал способ обработки разрывов веб-сокетов в своем приложении React с подписками Apollo и не нашел способа сделать это.Другие примеры, которые я вижу в документации apollo, показывают приведенный ниже метод перехвата:

  const wsClient = process.browser ? new SubscriptionClient(WSendpoint, {
    reconnect: true,
  }) : null;

  const wsLink = process.browser ? new WebSocketLink(wsClient) : null;

  if (process.browser) {
    wsLink.subscriptionClient.on(
      'reconnected',
      () => {
        console.log('reconnected')
      },
    )
  }

При использовании вышеуказанного метода есть две проблемы:

  1. - это непоймать, когда пользователь отключается от своего Интернета (только после перезапуска сервера по какой-либо причине)
  2. , что переподключение происходит за пределами моих компонентов приложений React.

То, что я хотел бы сделать, это перезагрузить мой компонент "чат", если пользователь отключается от Интернета или по какой-либо причине отключается мой экспресс-сервер.Чтобы это произошло, мне понадобится мой компонент чата для полной перезагрузки, что, я не уверен, было бы возможно из-за пределов моего дерева компонентов.

Есть ли в компонентах Apollo Query или Subscription метод для захвата этого события и его соответствующей обработки из компонента?

1 Ответ

0 голосов
/ 14 марта 2019

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

  1. Настройка online/offline прослушивателя ( ref )
  2. Настройка Apollo middleware для обработки сетевых ошибок с вашего сервера ( ref )
  3. Создайте переменную в вашем магазине, например, isOnline, которая может содержать глобальную ссылку на состояние вашего приложения.Всякий раз, когда срабатывают два вышеупомянутых метода, вы можете обновить значение isOnline
  4. Наконец, чтобы связать все это вместе.Создайте реакцию HOC , которая использует isOnline для обработки состояния сети для каждого компонента.Это может использоваться для обработки сообщений об ошибках сети, обновления компонентов после восстановления сети.
...