Skip to content

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 Sub

POST 方式连接(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 cSSEClient

ConnectPost ​

以 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()

属性 ​

属性类型说明
UrlString当前连接的 URL
ConnectedBoolean连接状态
ConnectingBoolean是否正在连接中
AutoReconnectBoolean是否启用自动重连(默认 True)
ReconnectIntervalLong重连间隔(毫秒,默认 3000ms)
MaxReconnectAttemptsLong最大重连次数(默认 10 次)
CurrentReconnectAttemptsLong当前重连尝试次数
LastReceivedEventIdString最后收到的事件 ID
CurrentReconnectDelayLong当前重连延迟(毫秒)
ServerReconnectIntervalLong服务器指定的重连间隔
RequestTimeOutLong请求超时时间(秒,默认 60)

事件 ​

事件说明
OnOpen()连接建立时触发
OnMessage(EventName, Data, Id)收到消息时触发
OnError(Description, ErrorNumber)发生错误时触发
OnClose()连接关闭时触发

最后更新: 2025-05-25

VB6及其LOGO版权为微软公司所有