VBMAN WebSocket 双向通信示例
提示
本篇由ai根据vbman源码自动猜测,真实对象尚未发布。
概述
这个示例展示了如何使用 VBMAN 框架实现基于 WebSocket 协议的实时双向通信。相比 SSE,WebSocket 提供了真正的双向通信能力,客户端和服务器都可以主动发送数据。
项目结构
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));
}
}
功能说明
WebSocket服务器功能
- 支持多客户端连接
- 支持消息广播
- 支持私聊消息
- 支持自定义协议
消息处理功能
- JSON格式消息
- 消息类型识别
- 消息路由分发
- 错误处理机制
认证与安全
- 连接认证
- 心跳检测
- 断线重连
- 安全传输
技术要点
- WebSocket协议实现
- 双向通信机制
- 消息广播系统
- 认证中间件
应用场景
- 在线聊天室
- 游戏服务器
- 协同编辑
- 实时通知
扩展建议
- 添加消息压缩
- 实现分组广播
- 添加离线消息
- 实现消息持久化
- 添加集群支持