背景与价值SSE 适合单向实时通知与日志流;浏览器原生支持,网络穿透与代理兼容较好。客户端function connectSSE(url: string) {
let backoff = 1000, max = 30000;
let es = new EventSource(url);
es.onmessage = (e) => handle(JSON.parse(e.data));
es.onerror = () => {
es.close();
setTimeout(() => { backoff = Math.min(backoff * 2, max); es = connectSSE(url) as any; }, backoff);
};
return es;
}
服务端(Node/Express)app.get('/sse', (req, res) => {
res.set({ 'Content-Type': 'text/event-stream', 'Cache-Control': 'no-cache', Connection: 'keep-alive' });
res.flushHeaders();
const t = setInterval(() => res.write(`data: ${JSON.stringify({ ts: Date.now() })}\n\n`), 1000);
req.on('close', () => clearInterval(t));
});
指标验证(Chrome 128/Edge 130)首条消息延迟(P95):≤ 400ms。断线恢复成功率:≥ 98%。稳定性:长时间连接无泄漏与异常;心跳正确。回退策略不支持或代理限制:回退为长轮询或 WebSocket。测试清单弱网与代理环境:连接稳定并恢复;消息顺序正确。

发表评论 取消回复