sse技术集合chatgpt使用
sse是服务端向客户端单向传输的技术,它的应用场景是股票市场数据更新、实时通知、ChatGPT流失返回数据等。
# 原理
- JavaScript SSE (Server-Sent Events) 技术是一种用于在客户端和服务器之间实现实时、单向通信的技术。
- 它允许服务器向客户端发送异步事件,而无需客户端发起请求。
- SSE 使用基于HTTP协议的长连接,通过在服务器和客户端之间保持持久的连接,实现了服务器向客户端推送数据的能力。
- 与传统的Ajax轮询相比,SSE 提供了更高效、更实时的数据传输方式。
- SSE 的基本原理是客户端通过使用 JavaScript 创建一个 EventSource 对象来与服务器建立连接。
- 该对象指定服务器的 URL,然后开始监听来自服务器的事件。服务器可以通过发送包含特定格式数据的响应来触发这些事件。
- 一旦建立连接,服务器可以周期性地发送事件和数据到客户端,而客户端则可以通过在 EventSource 对象上注册事件处理程序来处理这些事件。
# 特点
- 单向通信:SSE 是服务器向客户端的单向通信方式,仅服务器发送事件和数据给客户端,而不需要客户端发送请求。
- 实时性:SSE 提供了实时数据传输的能力,服务器可以随时向客户端发送更新的数据。
- 长连接:SSE 使用长连接,可以持续保持连接而不需要频繁地建立和关闭连接,这减少了网络开销。
- 事件驱动:SSE 使用事件驱动的模型,服务器可以发送不同类型的事件,而客户端可以根据事件类型来处理数据。
# 相关代码
let sse = new EventSource(`/openai/completions/stream?user=${this.getUser()}&prompt=${this.message}`)
// 连接建立
sse.addEventListener('open', (function () {
console.log('open')
this_.generating = true
this_.items.push({user: 'bot', messageType: 'TEXT', message: ''})
}))
// 开始发送消息
sse.addEventListener('message', function (res) {
// 根据api接口返回的信息关闭sse连接
sse.close()
})
// 错误处理
sse.addEventListener('error', function () {
console.log('error')
this_.generating = false
alert('服务器错误,请查看日志')
})
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
上次更新: 2023-09-07 10:22:14