在前端 AI 对话应用中,我们需要实现大模型的流式输出渲染
1、SSE 和 webSocket 核心区别
SSE(Server-Sent Events)和 WebSocket 都是用于实现服务器与客户端之间的双向通信的技术,但它们有一些核心区别:
- SSE 是单向的,即服务器只能向客户端发送数据,客户端不能主动向服务器发送数据。SSE 使用 HTTP 协议,因此它不能实现全双工通信。
- WebSocket 是双向的,即服务器和客户端都可以主动向对方发送数据。WebSocket 使用 TCP 协议,因此它支持全双工通信。
- SSE 的实现相对简单,只需要在客户端创建一个 EventSource 对象,然后在服务器端使用 HTTP 协议发送数据即可。WebSocket 的实现相对复杂,需要使用 WebSocket 协议进行握手和通信。
- SSE 的兼容性较好,可以在所有现代浏览器中使用。WebSocket 的兼容性较差,一些旧版本的浏览器不支持 WebSocket。
- SSE 的数据传输效率较低,因为每次通信都需要建立一个新的 HTTP 连接。WebSocket 的数据传输效率较高,因为可以复用 TCP 连接。
- SSE 的数据格式是文本,而 WebSocket 的数据格式可以是文本或二进制。因此,如果需要传输大量数据,WebSocket 的效率更高。
- SSE 的数据传输是可靠的,因为每次通信都需要确认。WebSocket 的数据传输也是可靠的,但需要使用 WebSocket 协议的帧格式来保证数据的可靠传输。
- SSE 的数据传输是顺序的,即服务器发送的数据会按照顺序到达客户端。WebSocket 的数据传输是无序的,即服务器发送的数据可能会乱序到达客户端。
- SSE 的数据传输是有限的,即每次通信的数据量有限。WebSocket 的数据传输是无限的,即可以传输任意大小的数据。
- SSE 的数据传输是持续的,即服务器会持续发送数据,直到客户端关闭连接。WebSocket 的数据传输是暂时的,即服务器发送数据后,连接会关闭,需要重新建立连接才能继续通信。
- SSE 的数据传输是异步的,即服务器发送数据后,客户端可以继续执行其他操作,而不需要等待数据传输完成。WebSocket 的数据传输是同步的,即服务器发送数据后,客户端需要等待数据传输完成才能继续执行其他操作。
- 通信,SSE 是单向的,而 WebSocket 是双向的。
- 数据格式,SSE 的数据格式是文本,而 WebSocket 的数据格式可以是文本或二进制。
- 重连级制,SSE 的重连机制是自动的,而 WebSocket 的重连机制需要手动实现。
- 兼容性,SSE 的兼容性较好,可以在所有现代浏览器中使用。WebSocket 的兼容性较差,一些旧版本的浏览器不支持 WebSocket。
- 使用成本,SSE 的使用成本较低,因为只需要使用 HTTP 协议。WebSocket 的使用成本较高,因为需要使用 WebSocket 协议进行握手和通信。
- 底层协议, SSE 基于标准 HTTP/HTTPS协议无需升级, WebSocket 走的ws / wss 协议,需要升级握手。
2、适用场景
- SSE 适用于需要服务器主动推送数据到客户端的场景,例如实时消息、实时新闻推送等。
- WebSocket 适用于需要客户端和服务器之间进行双向通信的场景,例如在线聊天、实时游戏等。