我正在使用服务器在后端使用Spring Boot启动事件并作为客户端使用react-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);
    }
  }

最佳答案

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

原因是对本机currently does not support HTTP streams作出反应。

07-24 09:47
查看更多