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

Client receives only some server sent events

我正在处理服务器发送的事件,spring 在后端启动,react-native/expo 作为客户端。 为了处理客户端上的服务器发送事件,我使用 react-native-event-source。但问题是客户端只收到了一些事件。这是场景:

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

以下是我们如何初始化连接以获取服务器发送的事件:

  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