onmessage用于接收服务端发送的无命名事件(即无event:字段),仅处理data:开头的消息;需手动解析event.data字符串,其type恒为"message"。

在 JavaScript 中使用 SSE(Server-Sent Events)时,onmessage 用于接收服务器发送的**未指定事件类型(即没有 event: 字段)**的消息,默认就是这种“无命名事件”。只要服务端发送的是纯 data: 行(且不带 event:),浏览器就会触发 EventSource 实例的 onmessage 回调。
确保服务端发送的是默认事件格式
SSE 要求服务端响应头为 Content-Type: text/event-stream,且每条消息以 data: 开头,以双换行符结束。若不写 event: 行,就属于默认事件:
data: {"status":"ok","value":42}
data: hello world
这样的消息会被 onmessage 捕获,而不是 addEventListener('xxx')。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
前端用 onmessage 接收并解析数据
直接给 EventSource 实例赋值 onmessage 回调函数即可。注意:event.data 是字符串,需手动解析(如 JSON):
-
event参数是MessageEvent对象,其data属性是服务端发来的原始字符串(不含data:前缀和换行) - 若服务端发的是 JSON 字符串,需调用
JSON.parse(event.data) -
event.type此时固定为"message",不可自定义
完整示例代码
前端初始化方式:
const es = new EventSource('/api/sse');
es.onmessage = function(event) {
console.log('收到默认事件:', event.data); // 如 "hello world" 或 '{"id":1}'
try {
const data = JSON.parse(event.data);
console.log('解析后的数据:', data);
} catch (e) {
console.log('非JSON数据:', event.data);
}
};
es.onerror = function(err) {
console.error('SSE 连接出错', err);
};
常见误区提醒
- 不要混淆
onmessage和addEventListener('message', ...)—— 两者效果相同,但onmessage更简洁,且仅对默认事件生效 - 如果服务端写了
event: update,那必须用es.addEventListener('update', ...),onmessage不会触发 -
event.id和event.ports在 SSE 中基本不用;event.lastEventId可用于断线重连时传递上次 ID
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










