后端基础-实时通信

后端基础-实时通信

轮询

  • 轮询是客户端按固定间隔重复发请求,询问是否有新数据。
  • 实现简单,但空请求多,实时性和资源利用率都一般。

长轮询

  • 长轮询是客户端发起请求后,服务端暂时不立即返回。
  • 一旦有新数据,服务端再返回响应;客户端收到后立刻发起下一次请求。
  • 相比普通轮询,请求次数更少,但本质仍是反复发 HTTP 请求。

SSE

  • SSE 是 Server-Sent Events。
  • 它建立在 HTTP 之上,用于服务端持续向客户端单向推送文本事件流。

特点:

  • 方向:服务端 -> 客户端
  • 协议基础:HTTP
  • 数据形态:文本事件流
  • 适合:通知、进度、AI 流式输出

不适合:

  • 需要客户端持续主动向服务端推消息
  • 需要高频双向交互

WebSocket

  • WebSocket 建立连接后,客户端和服务端都可以主动发消息。
  • 它适合需要持续双向通信的场景。

特点:

  • 方向:双向
  • 建连后不是一问一答式 HTTP
  • 适合:聊天、协同编辑、在线状态、高频互动

SSE 与 WebSocket

  • SSE:单向推送,简单,贴近 HTTP
  • WebSocket:双向通信,能力更强,实现也更重

优先判断:

  • 只需要服务端不断推消息:先考虑 SSE
  • 需要双方随时互发消息:考虑 WebSocket

选型

  1. 数据是否需要实时
  2. 是否只要服务端推送
  3. 是否需要高频双向消息
  4. 是否能接受更复杂的连接管理

常见场景

  • 订单状态刷新:轮询或 SSE
  • AI 输出流式返回:SSE
  • 聊天室:WebSocket
  • 在线协作:WebSocket

连接管理

  • 实时通信除了“收发消息”,还要处理连接建立、断开、重连、心跳、超时。
  • WebSocket 场景下,这部分通常比普通 HTTP 接口更值得单独设计。

关联

  • 底层仍然离不开 HTTP/HTTPS:
  • 实时接口也需要定义鉴权和消息格式: