WebSocket vs Server-Sent events 阅读笔记
type
status
date
Feb 23, 2024 10:21 AM
slug
summary
tags
category
icon
password
总结
偶然听闻ChatGPT Web的问答交互通信方式由SSE改回了WebSocket,借此机会了解一下二者的优缺点。
Websocket
优点:
- 全双工通信,服务端和客户端支持在同一个TCP连接上同时接收和发送消息
- 没有使用
XmlHttpRequest
,header
信息不会每次通信时都发送,传输payload更小
- 支持传输二进制数据和UTF-8格式
限制:
- 不支持重连,需要手动设计实现
- 不支持2011年之前的浏览器
- 不兼容部分企业防火墙的数据包检查功能
- 与基于
header
的口令鉴权会有冲突,需分开处理或者换成查询参数
常见场景:
- 实时聊天
- 多人游戏
- 协同编辑/开发
- 社交动态
- 体育动态
- …
Server-Sent Events (SSE)
优点:
- 基于HTTP协议,部署实现更简单
- 内置重连机制(
event-id
)
- 不受企业防火墙影响
限制:
- 单工通信,只支持服务器推送消息
- 只支持UTF-8格式,不支持二进制数据,需要编码为Base64
- 非HTTP/2协议下,浏览器有最大连接数限制(6)
- 浏览器兼容性不是特别好,但有
polyfill
实现
常见场景:
- 股票客户端
- 推特动态
- 推送通知
总的来说,二者没有哪个更好一说,根据具体场景按需选择即可。