Skip to content

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>

功能说明

  1. SSE服务端功能

    • 支持多客户端连接
    • 支持定时推送
    • 支持手动推送
    • 支持自定义事件类型
  2. 消息推送特性

    • 自动重连机制
    • 断线重连
    • 事件分类推送
    • 跨域支持
  3. 客户端功能

    • 原生 SSE 支持
    • 事件监听机制
    • 连接状态监控
    • 错误处理

技术要点

  1. SSE 协议实现
  2. 实时数据推送
  3. 长连接管理
  4. 事件驱动模型

应用场景

  1. 实时数据监控
  2. 消息通知系统
  3. 实时报表更新
  4. 日志实时显示

扩展建议

  1. 添加消息过滤机制
  2. 实现消息压缩
  3. 添加消息优先级
  4. 实现消息确认机制
  5. 添加负载均衡支持

基于 VB6组件 发布