You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 12:07:08