客户端只接收一些服务器发送的事件
Client receives only some server sent events
我正在处理服务器发送的事件,spring 在后端启动,react-native/expo 作为客户端。
为了处理客户端上的服务器发送事件,我使用 react-native-event-source。但问题是客户端只收到了一些事件。这是场景:
- 事件 ID 0 -> 未收到
- 事件 ID 1 -> 收到
- 事件 id 2 -> 未收到
- 事件 id 3 -> 收到
- 事件 id 4 -> 未收到
- 事件 ID 5 -> 收到
...
在服务器端,我们尝试了不同的黑客攻击,日志显示服务器实际上正在发送每个事件,但 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。
我正在处理服务器发送的事件,spring 在后端启动,react-native/expo 作为客户端。 为了处理客户端上的服务器发送事件,我使用 react-native-event-source。但问题是客户端只收到了一些事件。这是场景:
- 事件 ID 0 -> 未收到
- 事件 ID 1 -> 收到
- 事件 id 2 -> 未收到
- 事件 id 3 -> 收到
- 事件 id 4 -> 未收到
- 事件 ID 5 -> 收到 ...
在服务器端,我们尝试了不同的黑客攻击,日志显示服务器实际上正在发送每个事件,但 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。