客户端仅接收一些服务器发送的事件

时间:2020-01-31 13:02:49

标签: javascript spring-boot react-native expo server-sent-events

我正在使用服务器发送的事件通过后端的Spring Boot进行启动,并以client / native / expo作为客户端。 要在客户端上处理服务器发送事件,我使用react-native-event-source。但是问题是客户端仅接收到一些事件。这是场景:

  • 事件ID 0->未收到
  • 事件ID 1->已收到
  • 事件ID 2->未收到
  • 事件ID 3->已收到
  • 事件ID 4->未收到
  • 收到
  • 事件ID 5-> ...

在服务器端,我们尝试了不同的黑客攻击和日志,显示服务器实际上正在发送每个事件,但博览会客户端似乎忽略了某些事件(两个事件中的一个)。

这是我们初始化连接以获取服务器发送事件的方式:

  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 个答案:

答案 0 :(得分:1)

react-native-event-source不使用真正的EventSource,而是通过轮询来解决。因此,我的猜测是您的客户错过了消息,因为单个轮询间隔(that is 500ms)中有多个消息。

这样做的原因是对本地currently does not support HTTP streams做出反应。