可直接用onmessage属性或addeventlistener("message")监听sse消息,需手动解析e.data字符串并加try...catch兜底,同时配合onopen、onerror处理连接状态,页面卸载前调用close()关闭连接。

直接用 EventSource 实例的 onmessage 属性或 addEventListener("message") 就能监听服务器推送的默认消息,关键是要正确解析 e.data 字符串,并做好错误兜底。
监听 message 事件的两种写法
服务端没发 event: 字段时,所有消息都会触发 message 事件。你可以任选一种方式监听:
-
用 onmessage 属性(简洁常用):
直接赋值函数,适合单个处理逻辑。 -
用 addEventListener("message", handler):
支持多次绑定、可移除,适合模块化或动态注册场景。
两者效果一致,event.data 都是字符串,需手动解析。
正确解析 event.data 数据
event.data 永远是字符串,即使服务端发的是 JSON,前端也得自己 JSON.parse():
- 先检查
e.data是否为空或只含空白字符,避免JSON.parse("")报错 - 用
try...catch包裹解析过程,防止非法 JSON 导致脚本中断 - 常见服务端格式如
data: {"id":1,"text":"hello"}\n\n,解析后才是可用对象
配合 open 和 error 做基础健壮性处理
光监听 message 不够,实际使用中建议一并处理连接状态:
-
onopen:连接成功时执行,可记录日志或切换 UI 状态 -
onerror:连接失败或中断时触发;注意它可能反复触发(因自动重连),建议加防抖或只在readyState === 0时提示用户 - 收到消息后及时更新 DOM 或状态管理器,避免重复渲染或内存泄漏
记得主动关闭连接
页面卸载或组件销毁前,调用 eventSource.close():
- 防止后台连接持续占用资源
- 避免在已销毁的上下文中执行回调(如 React 组件 unmount 后仍收到消息)
- 可在
beforeunload或组件useEffect cleanup中统一处理
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











