长连接:ChatGPT 流式响应背后的逻辑 | 京东物流技术团队
一、前言:
提起长连接,我们并不陌生,最常见的长连接非 websocket 莫属了。即使没有在项目中实际用过,至少也应该有所接触。长连接指在一次网络通信中,客户端与服务器之间建立一条持久的连接,可以在多次请求和响应中重复使用该连接。这种方式的优点是减少了连接建立和关闭的开销,提高了通信效率,但需要注意控制连接的数量,避免资源浪费。短连接则是每次请求和响应都建立一个新的连接,完成后立即关闭,需要频繁进行连接建立和关闭,效率相对较低。但是这种方式更加灵活,适用于请求量较小、请求频率不高的场景。
二、背景:
最近项目在引用 chatgpt 智能小助手,最开始采用的是当 chatgpt 回答完成后一次性返回答案。但这种方式受限于网络及服务较慢的原因导致用户需要等待较长时间,极大的降低了用户的使用体验。经过项目组成员商议决定采取答案逐字返回的形式,以便于用户能更快的得到反馈。
关于长连接技术,主要考虑两种方案 websocket 和 sse
三、原理:
1.websocket 概念:WebSocket 是 HTML5 定义的新协议,实现了服务器与客户端之间的全双工通信。WebSocket 连接一旦建立,客户端和服务器端处于平等地位,可以相互发送数据,不存在请求和响应的区别。
2、websocket 优劣势:优势在于实现了双向通信,劣势在于服务器端的逻辑非常复杂。现在针对不同的后台语言有不同的插件可以使用。
3、sse 概念:SSE(Server-Sent Events)是 HTML5 新增的功能,允许服务器将数据推送到客户端。与长轮询和短轮询不同,SSE 不需要客户端先发送请求,而是在服务器端数据有更新时立即发送到客户端
4、sse 优劣势:优势在于节约资源,提升应用性能。SSE 可以实现只要服务器端数据有更新,就可以马上发送到客户端,不需要建立或保持大量的客户端发往服务器端的请求。另外,SSE 的实现非常简单,并且不需要依赖其他插件。劣势在于不是双向通信,只能后台向前台推送。
5、相同点:都是基于 tcp,都是可靠的传输协议
6、不同点:
WebSocket 是双向通信协议,模拟 Socket 协议,可以双向发送或接受信息
HTTP 是单向的
WebSocket 是需要浏览器和服务器握手进行建立连接的
而 http 是浏览器发起向服务器的连接,服务器预先并不知道这个连接
四、应用:
1、sse 在 chatgpt 中的应用
前端代码
后端代码
2、websockt 在即时聊天中的应用
前端代码
后端代码
五、效果:
sse 在 chatgpt 案例中的应用
作者:京东物流 田雷雷
来源:京东云开发者社区 自猿其说 Tech
版权声明: 本文为 InfoQ 作者【京东科技开发者】的原创文章。
原文链接:【http://xie.infoq.cn/article/1464e1a800d8eab2711fd83c4】。文章转载请联系作者。
评论