桌面应用需要实时刷新数据,WebSocket 最自然。但某些网络环境会拦截 ws 协议,所以同时实现了 SSE 作为降级方案。
WebSocket 基础
const ws = new WebSocket('wss://example.com/ws');
ws.onmessage = (event) => {
const data = JSON.parse(event.data);
updateUI(data);
};
SSE 降级
WebSocket 连接失败时,自动切换到 SSE。SSE 基于 HTTP,穿透性更好。
const source = new EventSource('/api/sse');
source.onmessage = (event) => {
const data = JSON.parse(event.data);
updateUI(data);
};
心跳检测
每 30 秒发送 ping,如果连续 3 次无响应,认为连接断开,触发重连。