SSE vs WebSocket 对比
| 特性 |
SSE |
WebSocket |
| 方向 |
服务端->客户端 |
双向 |
| 复杂度 |
简单,基于http |
较复杂,独立协议 |
| 适用场景 |
消息推送/流式输出 |
聊天,游戏,高屏交互 |
SSE用法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| const eventSource = new EventSource("/api/stream");
eventSource.onmessage = (event) => { const data = JSON.parse(event.data); console.log("收到推送:", data); };
eventSource.addEventListener("notification", (event) => { console.log("新通知:", event.data); });
eventSource.onerror = () => { console.log("连接异常,浏览器会自动重连"); };
|
webSocket用法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| const ws = new WebSocket("ws://localhost:3000");
ws.onopen = () => { console.log("✅ WebSocket 连接已建立");
ws.send( JSON.stringify({ type: "message", content: "Hello Server!", }), ); };
ws.onmessage = (event) => { const data = JSON.parse(event.data); console.log("📨 收到服务端消息:", data);
switch (data.type) { case "pong": console.log("心跳响应"); break; case "notification": console.log("通知:", data.content); break; default: console.log("普通消息:", data); } };
ws.onerror = (error) => { console.error("❌ WebSocket 错误:", error); };
ws.onclose = (event) => { console.log("🔌 WebSocket 连接已关闭", event.code, event.reason); };
|
心跳机制
心跳机制是一种用于保活和探测连接状态的技术。前端通过websocket或长轮训场景因为中间网络设备(如网关)会长时间没有数据交互的闲置连接,导致“假死”的状态。
解决:前端定期发送ping数据,服务器返回pong,如连接多次无响应,前端判定连接已断开,主动执行重连。