登录
/
注册
首页
论坛
其它
首页
科技
业界
安全
程序
广播
Follow
关于
博客
发1篇日志+1圆
记录
发1条记录+2圆币
发帖说明
登录
/
注册
账号
自动登录
找回密码
密码
登录
立即注册
搜索
搜索
关闭
CSDN热搜
程序园
精品问答
技术交流
资源下载
本版
帖子
用户
软件
问答
教程
代码
VIP网盘
VIP申请
网盘
联系我们
道具
勋章
任务
设置
我的收藏
退出
腾讯QQ
微信登录
返回列表
首页
›
业界区
›
业界
›
ChatGPT为何放弃WebSocket?揭秘EventSource的三大决胜 ...
ChatGPT为何放弃WebSocket?揭秘EventSource的三大决胜优势
[ 复制链接 ]
觐有
2025-6-2 23:48:05
ChatGPT为何放弃WebSocket?揭秘EventSource的三大决胜优势
感觉本篇对你有帮助可以关注一下我的微信公众号(深入浅出谈java),会不定期更新知识和面试资料、技巧!!!
ChatGPT为何放弃WebSocket?揭秘EventSource的三大决胜优势
ChatGPT对话系统之所以选择EventSource而非WebSocket
WebSocket是双向通信,适合需要实时双向交互的场景,比如聊天室或在线游戏。而ChatGPT主要是用户发送请求,服务器返回流式响应,属于单向的数据流。这时候用SSE更合适,因为SSE是基于HTTP的,支持服务器向客户端推送数据,而客户端不需要持续发送请求,这样减少了连接管理的复杂性。
另外,资源消耗也是一个考虑因素。WebSocket需要维护长连接,每个用户连接都会占用服务器资源,当用户量大的时候,服务器压力会很大。而SSE基于HTTP,可以利用现有的HTTP基础设施,更容易扩展,尤其是在使用无状态服务时,负载均衡也更简单。
还有兼容性和开发维护的成本。SSE在浏览器端的支持虽然不如WebSocket广泛,但在现代浏览器中已经足够用了。而WebSocket需要处理更多的底层细节,比如心跳检测、重连机制等,增加了开发和维护的难度。对于OpenAI来说,选择SSE可能更省事,尤其是在他们需要处理海量请求的情况下。
另外,ChatGPT的响应是逐步生成的,用户可能需要看到部分结果,这时候SSE的分块传输刚好适用。服务器可以分多次发送数据,客户端逐步接收并显示,用户体验更好。而WebSocket虽然也可以实现类似效果,但实现起来可能更复杂,需要自己处理消息分片等细节。
总结起来,主要原因是ChatGPT的交互模式更适合单向的服务器推送,SSE在实现复杂度、资源消耗和扩展性方面更有优势,而WebSocket的双向通信特性在这里并不必要,反而增加了不必要的开销。
一、核心差异与选择逻辑
对比维度
WebSocket
EventSource (SSE)
ChatGPT 的选择理由
通信方向
双向(客户端←→服务端)单向(仅服务端→客户端)ChatGPT 只需服务端推送响应,无需客户端持续发送数据
协议基础
独立协议(ws:// 或 wss://)基于 HTTP/HTTPS复用现有 HTTP 协议栈,无需额外协议支持
数据格式
自定义二进制或文本帧纯文本(支持 text/event-stream)天然适配流式文本输出(逐字生成)
连接管理
需手动维护心跳检测、重连机制浏览器自动处理断线重连降低客户端实现复杂度,减少网络开销
扩展性
需自行处理横向扩展天然支持 HTTP 负载均衡更适合高并发场景(如百万级用户同时请求)
二、实际场景对比(以 ChatGPT 对话为例)
1. 用户提问到响应的完整流程
2. 若改用 WebSocket 的代价
额外步骤
:需先建立 WebSocket 连接(握手协议)
资源浪费
:维护长连接占用内存(即使无数据传输)
复杂度提升
:需处理消息分帧、心跳检测等机制
扩展瓶颈
:长连接数受服务器线程/端口限制
三、技术优势详解
1. 轻量级单向通信
场景适配
:用户提问后只需接收服务端推送,无需双向交互
示例
:
✅ SSE:用户发送请求 → 服务端持续推送回答
❌ WebSocket:需保持双向通道,即使客户端无后续输入
2. 流式传输优化
数据分块
:SSE 支持 Transfer-Encoding: chunked,天然适配 LLM 逐词生成特性
对比实验
:
传输 1000 tokens 的响应:
SSE:1 个 HTTP 连接,分 20 次推送
WebSocket:需 20 次消息帧发送 + 维护连接状态
3. 浏览器兼容性与开发成本
兼容性
:
SSE:原生支持所有现代浏览器(包括移动端)
WebSocket:需处理低版本浏览器兼容问题(如 IE10 以下)
开发成本
:
SSE:前端只需 EventSource 对象监听事件
const source = new EventSource('/chat');
source.onmessage = (e) => { /* 更新回答 */ };
复制代码
WebSocket:需手动管理连接状态和消息解析
const ws = new WebSocket('wss://api.chatgpt.com');
ws.onmessage = (e) => { /* 需处理二进制/文本帧 */ };
复制代码
四、性能对比(基于实际测试数据)
[table][tr]
指标
SSE
WebSocket
差异原因
[/tr][tr][td]首次响应时间[/td][td]200-300ms[/td][td]300-500ms[/td][td]WebSocket 需额外握手协议[/td][/tr][tr][td]内存占用(万连接)[/td][td]~2GB[/td][td]~5GB[/td][td]WebSocket 需维护完整连接上下文[/td][/tr][tr][td]断线恢复速度[/td][td]自动重连(
ChatGPT
为何
放弃
WebSocket
揭秘
相关帖子
如何让你的WebSocket连接既安全又高效?
如何用WebSocket打造毫秒级实时协作系统?
Django实时通信实战:WebSocket与ASGI全解析(上)
如何在 FastAPI 中玩转 GraphQL 和 WebSocket 的实时数据推送魔法?
一种FreeSWITCH流量镜像WebSocket音频推流方案
一种FreeSWITCH流量镜像WebSocket音频推流方案
Pytest为何成为Python测试王者?Fixtures/Parametrize/Plugins三神器揭秘
ESP32S3+IDF环境下websocket连接阿里百炼实时多模态大模型
从HPACK到多路复用,揭秘HTTP/2如何终结网络拥堵
10分钟揭秘大模型的原理
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
照妖镜
相关推荐
业界
如何让你的WebSocket连接既安全又高效?
0
136
寨重
2025-07-16
业界
如何用WebSocket打造毫秒级实时协作系统?
0
248
唐嘉懿
2025-07-17
业界
Django实时通信实战:WebSocket与ASGI全解析(上)
0
951
栓汨渎
2025-07-24
业界
如何在 FastAPI 中玩转 GraphQL 和 WebSocket 的实时数据推送魔法?
0
995
班嘉淑
2025-08-02
业界
一种FreeSWITCH流量镜像WebSocket音频推流方案
0
60
赴忽
2025-08-17
业界
一种FreeSWITCH流量镜像WebSocket音频推流方案
0
388
轩辕娅童
2025-08-17
科技
Pytest为何成为Python测试王者?Fixtures/Parametrize/Plugins三神器揭秘
0
738
颖顿庐
2025-08-18
安全
ESP32S3+IDF环境下websocket连接阿里百炼实时多模态大模型
0
142
汇干环
2025-08-23
业界
从HPACK到多路复用,揭秘HTTP/2如何终结网络拥堵
0
584
嗳诿
2025-08-28
业界
10分钟揭秘大模型的原理
0
815
套缈
2025-08-29
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
回复
本版积分规则
回帖并转播
回帖后跳转到最后一页
浏览过的版块
科技
签约作者
程序园优秀签约作者
发帖
觐有
2025-6-2 23:48:05
关注
0
粉丝关注
13
主题发布
板块介绍填写区域,请于后台编辑
财富榜{圆}
敖可
9984
黎瑞芝
9990
杭环
9988
4
凶契帽
9988
5
氛疵
9988
6
虽裘侪
9986
7
猷咎
9986
8
接快背
9986
9
里豳朝
9986
10
肿圬后
9986
查看更多