我正在使用服务器在后端使用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作出反应。