后端基础-实时通信
后端基础-实时通信
轮询
- 轮询是客户端按固定间隔重复发请求,询问是否有新数据。
- 实现简单,但空请求多,实时性和资源利用率都一般。
长轮询
- 长轮询是客户端发起请求后,服务端暂时不立即返回。
- 一旦有新数据,服务端再返回响应;客户端收到后立刻发起下一次请求。
- 相比普通轮询,请求次数更少,但本质仍是反复发 HTTP 请求。
SSE
- SSE 是 Server-Sent Events。
- 它建立在 HTTP 之上,用于服务端持续向客户端单向推送文本事件流。
特点:
- 方向:服务端 -> 客户端
- 协议基础:HTTP
- 数据形态:文本事件流
- 适合:通知、进度、AI 流式输出
不适合:
- 需要客户端持续主动向服务端推消息
- 需要高频双向交互
WebSocket
- WebSocket 建立连接后,客户端和服务端都可以主动发消息。
- 它适合需要持续双向通信的场景。
特点:
- 方向:双向
- 建连后不是一问一答式 HTTP
- 适合:聊天、协同编辑、在线状态、高频互动
SSE 与 WebSocket
- SSE:单向推送,简单,贴近 HTTP
- WebSocket:双向通信,能力更强,实现也更重
优先判断:
- 只需要服务端不断推消息:先考虑 SSE
- 需要双方随时互发消息:考虑 WebSocket
选型
- 数据是否需要实时
- 是否只要服务端推送
- 是否需要高频双向消息
- 是否能接受更复杂的连接管理
常见场景
- 订单状态刷新:轮询或 SSE
- AI 输出流式返回:SSE
- 聊天室:WebSocket
- 在线协作:WebSocket
连接管理
- 实时通信除了“收发消息”,还要处理连接建立、断开、重连、心跳、超时。
- WebSocket 场景下,这部分通常比普通 HTTP 接口更值得单独设计。
关联
- 底层仍然离不开 HTTP/HTTPS:
- 实时接口也需要定义鉴权和消息格式: