React Native中SSE的onmessage监听器返回旧事件而非新事件求助
解决React Native SSE流重复返回旧事件的问题
可能的原因及对应方案
1. 服务器端事件格式不符合增量要求
Web端可能有上层逻辑自动处理了累积内容,但React Native的SSE库会原封不动返回服务器发送的data字段。如果服务器每次推送的不是新增片段,而是从[START]开始的完整累积内容(比如每次推[START]→[START]This→[START]This is...),那客户端收到的自然是重复之前所有内容的结果。
验证方法:用curl直接请求API,查看返回的数据流:
curl -N <你的API地址>
如果输出是每次累积的完整内容,那需要调整服务器端,改为每次只发送新增的文本片段。
2. 客户端手动做增量处理(如果服务器无法修改)
如果服务器确实只能发送累积内容,那客户端需要自己维护状态,提取每次的增量部分:
import EventSource from 'react-native-sse'; let previousContent = ''; const es = new EventSource('<你的API地址>', { headers: { // 你的请求头配置 }, }); es.addEventListener('message', (event) => { const currentContent = event.data; // 计算并提取新增内容 const newContent = currentContent.slice(previousContent.length); if (newContent) { console.log('新增内容:', newContent); // 这里处理新增内容,比如更新UI } // 更新缓存的历史内容 previousContent = currentContent; }); es.addEventListener('error', (error) => { console.error('SSE错误:', error); es.close(); });
3. 检查SSE库的配置
部分RN SSE库可能默认开启了缓存或数据合并机制,尝试查看库的文档,关闭相关配置。比如react-native-sse的参数是否和Web端EventSource的配置一致,确保没有开启额外的内容处理逻辑。
日志验证建议
在客户端打印每次收到的event.data原始内容,对比Web端的接收日志,确认是服务器发送内容的问题,还是客户端库的处理问题:
es.addEventListener('message', (event) => { console.log('原始收到的data:', event.data); });
内容的提问来源于stack exchange,提问作者vin
相关产品推荐
相关产品推荐

