Server-sent events 与 WebSocket 主要有两大不同: 首先前者在建连后只能由服务端单向发送数据至客户端,而后者是可以双向通信的; 其次前者仍然是基于 HTTP 协议,而后者在不降级的情况下使用的是基于 TCP 的 WS 协议。 我觉得本质上 SSE 是对传统长轮询的优化。

对于连接保活,则还是经典的由服务端发送空包或约定好的特定无意义数据做为 ping 动作。 对于连接断开,通常客户端会尝试重连,服务端也可以通过向客户端发送 retry 命令来指定重连尝试周期。此外,服务端还可以选择维护一个 Last-Event-ID 字段,让客户端重连时带上,这样就可以做到消息续传了。