cSSEClient SSE 客户端组件
简介
cSSEClient 是一个 Server-Sent Events (SSE) 客户端实现,用于接收服务器实时推送的消息。支持自动重连、事件解析、连接状态管理。支持 GET 和 POST 两种连接方式,适用于 AI 流式聊天等需要发送请求体的场景。
特性
- 自动重连机制
- 实时事件接收
- 支持 GET/POST 两种连接方式
- 支持自定义请求头
- 支持自定义重连间隔
- 支持 Last-Event-ID 续传
- 连接状态管理
- 最大重连次数限制
- 可配置请求超时
快速开始
基本使用(GET)
vb
Private WithEvents SSE As cSSEClient
Private Sub Form_Load()
Set SSE = New cSSEClient
' 配置重连参数
SSE.AutoReconnect = True
SSE.ReconnectInterval = 3000 ' 3秒
SSE.MaxReconnectAttempts = 10
' 连接到 SSE 服务端
Call SSE.Connect("https://api.example.com/events")
End Sub
Private Sub Form_Unload(Cancel As Integer)
Call SSE.Disconnect()
Set SSE = Nothing
End SubPOST 方式连接(AI 流式聊天等)
vb
Private WithEvents SSE As cSSEClient
Private Sub StartChat()
Set SSE = New cSSEClient
' 设置自定义请求头
SSE.SetHeader("Authorization", "Bearer sk-xxx") _
.SetHeader("Content-Type", "application/json")
SSE.RequestTimeOut = 120 ' 120秒超时
' POST 方式连接(自动禁用重连)
Dim Body As String
Body = "{""model"":""gpt-4"",""stream"":true,""messages"":[{""role"":""user"",""content"":""hello""}]}"
Call SSE.ConnectPost("https://api.openai.com/v1/chat/completions", Body)
End Sub事件处理
vb
' 连接建立
Private Sub SSE_OnOpen()
Debug.Print "SSE 连接已建立"
End Sub
' 收到消息
Private Sub SSE_OnMessage(EventName As String, Data As String, Id As String)
Debug.Print "事件: " & EventName
Debug.Print "数据: " & Data
Debug.Print "ID: " & Id
End Sub
' 发生错误
Private Sub SSE_OnError(Description As String, ErrorNumber As Long)
Debug.Print "SSE 错误 " & ErrorNumber & ": " & Description
End Sub
' 连接关闭
Private Sub SSE_OnClose()
Debug.Print "SSE 连接已关闭"
End Sub方法
Connect
以 GET 方式连接到 SSE 服务端。
vb
Public Function Connect(ByVal ServerUrl As String) As cSSEClientConnectPost
以 POST 方式连接到 SSE 服务端,适用于需要发送请求体的场景(如 AI 流式聊天)。POST 方式自动禁用重连。
vb
Public Function ConnectPost(ByVal ServerUrl As String, ByVal Body As String) As cSSEClient参数:
ServerUrl- SSE 服务端地址Body- POST 请求体内容
示例:
vb
Call SSE.ConnectPost("https://api.example.com/chat", "{""prompt"":""hello""}")Disconnect
断开 SSE 连接。
vb
Public Sub Disconnect()SetHeader
设置自定义请求头(链式调用)。
vb
Public Function SetHeader(ByVal Key As String, ByVal Value As String) As cSSEClient示例:
vb
SSE.SetHeader("Authorization", "Bearer token123") _
.SetHeader("Content-Type", "application/json")ClearHeaders
清空所有自定义请求头。
vb
Public Sub ClearHeaders()EnableAutoReconnect
启用自动重连。
vb
Public Sub EnableAutoReconnect()DisableAutoReconnect
禁用自动重连。
vb
Public Sub DisableAutoReconnect()ResetReconnectAttempts
重置重连计数器。
vb
Public Sub ResetReconnectAttempts()属性
| 属性 | 类型 | 说明 |
|---|---|---|
Url | String | 当前连接的 URL |
Connected | Boolean | 连接状态 |
Connecting | Boolean | 是否正在连接中 |
AutoReconnect | Boolean | 是否启用自动重连(默认 True) |
ReconnectInterval | Long | 重连间隔(毫秒,默认 3000ms) |
MaxReconnectAttempts | Long | 最大重连次数(默认 10 次) |
CurrentReconnectAttempts | Long | 当前重连尝试次数 |
LastReceivedEventId | String | 最后收到的事件 ID |
CurrentReconnectDelay | Long | 当前重连延迟(毫秒) |
ServerReconnectInterval | Long | 服务器指定的重连间隔 |
RequestTimeOut | Long | 请求超时时间(秒,默认 60) |
事件
| 事件 | 说明 |
|---|---|
OnOpen() | 连接建立时触发 |
OnMessage(EventName, Data, Id) | 收到消息时触发 |
OnError(Description, ErrorNumber) | 发生错误时触发 |
OnClose() | 连接关闭时触发 |
最后更新: 2025-05-25