Клиент получает только некоторые отправленные сервером события - PullRequest
0 голосов
/ 31 января 2020

Я работаю с событиями, отправленными сервером, с весенней загрузкой в ​​серверной части и реакцией-native / expo в качестве клиента. Для обработки события отправки сервером на клиенте я использую act-native-event-source . Но проблема в том, что клиент получает только некоторые события. Вот сценарий:

  • идентификатор события 0 -> не получено
  • идентификатор события 1 -> получено
  • идентификатор события 2 -> не получено
  • идентификатор события 3 -> получено
  • идентификатор события 4 -> не получено
  • идентификатор события 5 -> получено ...

на стороне сервера мы Попытки различных хаков и журналов показывают, что сервер фактически отправляет каждое событие, но клиент expo, похоже, игнорирует некоторые события (1 событие в двух).

Вот как мы инициализируем соединение для получения отправленных сервером событий:

  listen() {
    const options = {
      headers: {
        Authorization: `Bearer ${this.userToken}`,
      },
    };
    let url = `${TEST_URL}${this.user.id}`;
    try {
      console.log('starting stream ...');

      const eventName = `dataSet-created${this.user.id}`;

      this.eventSource = new RNEventSource(url, options); 
      this.eventSource.addEventListener(eventName, event => {
        console.log('stream event received', event);
      });

      this.eventSource.addEventListener('error', e => {
        console.log('stream listener error', e);
      });

      console.log('eventSource stream ...', this.eventSource);
    } catch (e) {
      console.log('start stream error', e);
    }
  }

1 Ответ

1 голос
/ 05 марта 2020

react-native-event-source не использует истинный EventSource, а обходится путем опроса. Так что я предполагаю, что ваш клиент пропускает сообщения, потому что в одном интервале опроса есть несколько (, что составляет 500 мс ).

Причина этого - реакция native в настоящее время не поддерживает потоки HTTP .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...