Skip to content

VBMAN WebSocket 双向通信示例 ​

提示

本篇由ai根据vbman源码自动猜测,真实对象尚未发布。

概述 ​

这个示例展示了如何使用 VBMAN 框架实现基于 WebSocket 协议的实时双向通信。相比 SSE,WebSocket 提供了真正的双向通信能力,客户端和服务器都可以主动发送数据。

项目结构 ​

下载源码 [ 注意:重新到bin目录注册 DLL 文件 ]

代码请到首页下载VBMAN 项目,解压后,打开包含所有DEMO项目。

WebSocket/
  ├── server/              # WebSocket服务器
  │   ├── Form1.frm       # 服务器主窗体
  │   ├── WebSocket.vbp   # 服务器项目文件
  │   └── include/        # 服务器端类库
  │       ├── wsHandler.cls # WebSocket处理类
  │       └── wsAuth.cls   # WebSocket认证类
  └── client/             # WebSocket客户端
      ├── index.html     # 客户端页面
      └── js/           # 客户端脚本
          └── ws.js     # WebSocket客户端实现

核心代码解析 ​

1. WebSocket服务器配置(Form1.frm) ​

vb
Dim WebSocketServer As New cWebsocketServer

Private Sub Form_Load()
    With WebSocketServer
        '注册事件处理程序
        .Router.Reg "WS", New wsHandler
        
        '配置认证中间件
        .Router.Before.Add "/*", New wsAuth
        
        '启动WebSocket服务器
        .Start 81
    End With
End Sub

'WebSocket客户端连接事件
Private Sub WebSocketServer_OnAccept(ClientInfo As cHttpServerClientInfo, Disconnect As Boolean)
    List1.AddItem Now() & " - 新连接: " & ClientInfo.IP & ":" & ClientInfo.Port
End Sub

'WebSocket数据到达事件
Private Sub WebSocketServer_OnDataArrival(Client As cWebsockerServerClient)  
    '获取消息内容
    Dim msg As String: msg = Client.ReceivedText
    
    '广播给所有客户端
    Client.Parent.Broadcast msg
    
    '添加到日志
    List1.AddItem Now() & " - 收到消息: " & msg
End Sub

2. WebSocket处理类(wsHandler.cls) ​

vb
Public Sub OnConnect(Client As cWebsockerServerClient)
    '连接建立时的处理
    With Client.NewJson
        .Item("type") = "welcome"
        .Item("time") = Now()
        .Item("msg") = "欢迎加入聊天室"
    End With
    Client.SendJson Client.Json
End Sub

Public Sub OnMessage(Client As cWebsockerServerClient)
    '处理接收到的消息
    Dim msg As String: msg = Client.ReceivedText
    
    '响应客户端
    With Client.NewJson
        .Item("type") = "reply"
        .Item("time") = Now()
        .Item("msg") = "服务器已收到: " & msg
    End With
    Client.SendJson Client.Json
End Sub

Public Sub OnClose(Client As cWebsockerServerClient)
    '连接关闭时的处理
    Client.Parent.Broadcast "用户离开: " & Client.ClientInfo.IP
End Sub

3. WebSocket认证中间件(wsAuth.cls) ​

vb
Public Sub Execute(Client As cWebsockerServerClient)
    '获取认证信息
    Dim token As String: token = Client.Request.Headers("Sec-WebSocket-Protocol")
    
    '验证失败时关闭连接
    If Not IsValidToken(token) Then
        Client.Close
        Exit Sub
    End If
End Sub

4. WebSocket客户端实现(ws.js) ​

javascript
class ChatClient {
    constructor() {
        // 创建WebSocket连接
        this.ws = new WebSocket('ws://localhost:81');
        
        // 绑定事件处理
        this.ws.onopen = this.handleOpen.bind(this);
        this.ws.onmessage = this.handleMessage.bind(this);
        this.ws.onclose = this.handleClose.bind(this);
        this.ws.onerror = this.handleError.bind(this);
    }
    
    handleOpen(e) {
        console.log('WebSocket连接已建立');
        this.send({type: 'login', user: this.username});
    }
    
    handleMessage(e) {
        const data = JSON.parse(e.data);
        switch(data.type) {
            case 'welcome':
                this.showWelcome(data);
                break;
            case 'message':
                this.showMessage(data);
                break;
            case 'users':
                this.updateUsers(data.users);
                break;
        }
    }
    
    handleClose() {
        console.log('WebSocket连接已关闭');
    }
    
    handleError(e) {
        console.error('WebSocket错误:', e);
    }
    
    send(data) {
        this.ws.send(JSON.stringify(data));
    }
}

功能说明 ​

  1. WebSocket服务器功能

    • 支持多客户端连接
    • 支持消息广播
    • 支持私聊消息
    • 支持自定义协议
  2. 消息处理功能

    • JSON格式消息
    • 消息类型识别
    • 消息路由分发
    • 错误处理机制
  3. 认证与安全

    • 连接认证
    • 心跳检测
    • 断线重连
    • 安全传输

技术要点 ​

  1. WebSocket协议实现
  2. 双向通信机制
  3. 消息广播系统
  4. 认证中间件

应用场景 ​

  1. 在线聊天室
  2. 游戏服务器
  3. 协同编辑
  4. 实时通知

扩展建议 ​

  1. 添加消息压缩
  2. 实现分组广播
  3. 添加离线消息
  4. 实现消息持久化
  5. 添加集群支持

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