简介(未完成)
sse
SSE(Server-Sent Events,服务器推送事件)是一种基于 HTTP 的网络通信协议,允许服务器向客户端单向推送实时数据。主要特点
- 高效的单向通信:专为服务端到客户端的单向通信所设计,完美匹配大模型场景(客户端发送一次请求,服务端持续返回流式结果)。
- 低延迟:每次生成一个逻辑段落或标记(token)即可立即推送,避免传统 HTTP 请求-响应模式的长等待。
- 轻量协议:基于HTTP/HTTPS,无需额外协议握手(如 WebSocket 的双向协商),减少连接开销。
SSE依赖client端先建立起同server端的连接之后,server端才能向这个连接进行push。换句话说,SSE本质上其实还是由client主动发起交互的,用于实现一些流式的效果,但server端不能随时发起一个交互(至少在一个常规的实现中是这样的)。
websocket
实时性是互联网应用中诸多场景的刚需。如果仅靠 RESTful API 的请求-响应模型,客户端要么需要不断轮询服务器,要么只能被动等待。前者带来资源浪费,后者无法满足实时性。因此,WebSocket 就应运而生,它们提供了从服务端主动推送消息到客户端的能力,但方式和适用场景有所不同。
WebSocket 是一种网络通信协议,允许在客户端和服务器之间建立全双工、持久的连接(一般client与server 之间有lb,lb 要配置session sticky?),实现实时、双向的数据传输。不同于 SSE,WebSocket 连接一旦建立,双方可以随时发送数据,实效性更强,即无须等待服务端返回内容,客户端就能发起请求,适用于多人在线游戏操作实时同步、社交软件的聊天室、在线文档多人同时编辑等。主要特点是:
- 全双工通信:客户端和服务器可以同时发送和接收数据。
- 持久连接:连接建立后保持打开状态,直到主动关闭。
- 低延迟:数据可以即时传输,适合实时应用。
需要独立的协议升级、长连接管理、心跳检测,复杂网络(防火墙、代理、负载均衡)
sse vs websocket
| SSE | WebSocket |
|---|---|
| 基于 HTTP 的轻量级协议 | WebSocket 是独立的协议 |
| 基于 HTTP 请求 Accept: text/event-stream 本质上,HTTP 协议是无法实现主动推送消息的,约定text/event-stream后,客户端便不会断开该连接,并持续从该连接上接收数据流。 |
WebSocket 借助 HTTP 升级协议 Upgrade: websocket,之后使用独立协议 |
| 伪双工,只支持服务端到客户端的单向通信,客户端到服务端的通信还需要另外发送 HTTP 请求进行 | 全双工的双向通信 |
| 简单、轻量,适合单向低频推送 | 复杂度高、实时性强,适合双向高频交互 |