专题归档 · 2026 年 3 月(编辑分组,非实际写作日期)
MemoFlow:SSE 显示连接中,却收不到通知事件
EventSource 一直处于 CONNECTING 时,排查代理、中间件压缩与 SSE 缓冲。
页面显示的状态和服务端状态对不上
使用 SSE 推送通知时,我发现EventSource 的 readyState 可能一直停在 CONNECTING,onopen 不触发;与此同时,前端以为已经连接,服务端却报告没有对应连接。单靠前端一个“连接成功”标识,无法证明事件已经能端到端送达。
把链路拆成几层看
当时把注意力放在浏览器与 Vite 开发代理、Express 响应压缩、长连接的输出缓冲、跨域与重连上。记录中出现了 content-encoding: br 的线索,但不能仅凭它就断言每一次连接失败都由 Brotli 导致。
要观察的是:响应头是否支持事件流、数据是否及时 flush、代理是否缓冲、连接是否在超时前保持、服务端是否还保存着有效的订阅者。
复盘时不直接照搬旧配置
我开始检查 SSE 路由是否被压缩中间件缓存,以及 Vite 代理有没有正确转发数据流。不同 Express 和 Vite 版本的中间件行为可能不同,还是要根据实际网络响应与事件到达情况判断。
这和 Reminder → Schedule → Notification 的事件一致性问题 有关联:能建立长连接并不等于事件生产端和订阅端状态一致。