VBMAN SSE(Server-Sent Events)服务器推送示例
概述
这个示例展示了如何使用 VBMAN 框架实现 SSE(Server-Sent Events)服务器推送功能,实现服务器向客户端的实时数据推送。示例包含定时推送和手动推送两种模式。
项目结构
SSE/
├── src/ # 服务器端项目
│ ├── Form1.frm # 主窗体
│ ├── bMes.cls # 消息处理类
│ └── VBMAN_DEMO_SSE.vbp # 项目文件
└── www/ # 前端页面
└── Client.html # SSE客户端页面
核心代码解析
1. 服务器端配置(Form1.frm)
vb
Dim HttpServer As New VBMANLIB.cHttpServer
Private Sub Form_Load()
With HttpServer
.Router.Reg "Mes", New bMes '注册消息处理类
.Router.AutoRoute = True '开启自动路由
.CrossDomain.Enable = True '允许跨域访问
'启用 SSE 功能
.SSE.Start
'启动 Web 服务器
.Start 82, App.Path & "\..\www"
End With
Shell "explorer http://127.0.0.1:82/Client.html"
End Sub
'定时器推送
Private Sub Timer1_Timer()
HttpServer.SSE.SendPack "timer", Now()
End Sub
'手动推送
Private Sub Command1_Click()
HttpServer.SSE.SendPack "test", Text2.Text
End Sub
2. 消息处理类(bMes.cls)
vb
Public Sub Printer(ctx As VBMANLIB.cHttpServerContext)
'获取客户端发送的数据
Dim zs As String: zs = ctx.Request.Json.Root("data")(1)("name")
Dim ls As String: ls = ctx.Request.Json.Root("data")(2)("name")
'将数据显示在界面上
Form1.Text1.Text = ctx.Request.Json.Encode(, 2)
'响应客户端
ctx.Response.Text "处理成功: " & Now()
End Sub
3. 客户端实现(Client.html)
html
<script>
// 创建 SSE 连接
var source = new EventSource('/sse');
// 监听服务器消息
source.addEventListener('timer', function(e) {
console.log('定时消息:', e.data);
});
source.addEventListener('test', function(e) {
console.log('测试消息:', e.data);
});
// 连接成功回调
source.onopen = function() {
console.log('SSE连接已建立');
};
// 错误处理
source.onerror = function(e) {
console.log('SSE连接错误:', e);
};
</script>
功能说明
SSE服务端功能
- 支持多客户端连接
- 支持定时推送
- 支持手动推送
- 支持自定义事件类型
消息推送特性
- 自动重连机制
- 断线重连
- 事件分类推送
- 跨域支持
客户端功能
- 原生 SSE 支持
- 事件监听机制
- 连接状态监控
- 错误处理
技术要点
- SSE 协议实现
- 实时数据推送
- 长连接管理
- 事件驱动模型
应用场景
- 实时数据监控
- 消息通知系统
- 实时报表更新
- 日志实时显示
扩展建议
- 添加消息过滤机制
- 实现消息压缩
- 添加消息优先级
- 实现消息确认机制
- 添加负载均衡支持