监听服务器消息需绑定onmessage事件处理器并安全解析event.data:先判断是否为字符串,再用try...catch解析json,校验type等字段后分发处理,避免因非法数据或未知类型导致中断。

监听并接收服务器消息,核心是绑定 onmessage 事件处理器,并正确解析 event.data。
监听 onmessage 事件
WebSocket 实例创建后,必须显式设置 onmessage 回调函数,否则收不到任何推送数据:
- 该回调在每次服务器发送消息时触发,参数
event是MessageEvent对象 -
event.data类型可能是字符串、Blob或ArrayBuffer,绝大多数 Web 场景下为字符串(尤其是 JSON 格式) - 建议统一用
try...catch包裹JSON.parse(),避免非法数据导致脚本中断
安全解析服务端数据
服务器通常以 JSON 字符串形式推送结构化消息,前端需主动解析并做类型判断:
- 先检查
event.data是否为字符串,再尝试JSON.parse() - 解析后检查关键字段(如
type、payload),按业务逻辑分发处理 - 对无法识别的
type或缺失字段,应记录日志而非静默忽略
常见错误与应对
实际开发中容易忽略的细节会影响消息接收稳定性:
-
onmessage必须在onopen之后设置——但更稳妥的做法是实例化后立即绑定,不依赖连接顺序 - 不要在
onmessage中执行耗时同步操作(如大量 DOM 更新),可考虑requestIdleCallback或节流 - 若服务端推送二进制数据(如图片、音频片段),需提前设置
socket.binaryType = 'arraybuffer'并用对应方式处理
示例代码片段
一个健壮的基础接收逻辑:
socket.onmessage = (event) => {<br> if (typeof event.data !== 'string') return;<br> try {<br> const msg = JSON.parse(event.data);<br> switch (msg.type) {<br> case 'chat': updateChatList(msg.content); break;<br> case 'heartbeat': handleHeartbeat(); break;<br> default: console.warn('未知消息类型:', msg.type);<br> }<br> } catch (e) {<br> console.error('消息解析失败', event.data);<br> }<br>};Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











