Skip to content

实时通信 ​

HTTP 轮询与长轮询 ​

轮询按周期请求更新。长轮询将请求挂起,直到有事件或超时,客户端随后发起下一次请求。

轮询间隔决定延迟和请求开销。长轮询要考虑代理超时、断线重试和事件游标。

SSE 与服务端单向推送 ​

SSE 使用 text/event-stream 长响应,浏览器可用 EventSource 解析事件。连接断开后通常自动重连,并可发送 Last-Event-ID。

事件流从服务端到客户端,客户端写操作通过其他请求完成。代理缓冲可能延迟事件交付。

WebSocket 与双向通信 ​

WebSocket 握手后可在同一连接双向传送文本或二进制消息。消息可由多个帧组成。

应用需处理断线重连、心跳和背压。浏览器 WebSocket 握手包含 Origin,服务端应验证来源。

各方式的连接模型与适用场景 ​

低频且允许延迟的更新适合轮询。单向事件流可用 SSE。高频双向交互可用 WebSocket。长轮询适用于服务端等待事件再返回的普通 HTTP 模型。

方式更新交付重连与恢复
短轮询周期性请求下次请求继续查询
长轮询每次请求等待事件或超时客户端立即发起下一次请求
SSE单个 HTTP 响应持续下发事件EventSource 可自动重连,可配合事件 ID
WebSocket双向消息通道应用管理重连及状态恢复

选择时比较双向需求、重连恢复、代理支持和空闲连接成本。消息可靠性还取决于应用层协议。

基于 MIT 许可发布