Files
sanguo_vnpy_v2/tests/WEBSOCKET_TESTING.md
T
claude_dev 918bbed0fc fix: 修复登录500错误和移除明文密码提示
- 修复 deps.py 中 get_vn_service 的引用错误 (vn_service.vn_service -> vn_service)
- 移除登录页面上的明文密码提示
- 改进前端错误处理,避免数据加载失败导致登录显示错误
2026-07-02 12:23:55 +08:00

200 lines
3.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# WebSocket 测试指南
## 概述
Phase 3 实现了 WebSocket 实时数据推送功能,包括:
- WebSocket 连接管理
- 事件监听器(Tick, Order, Trade, Position, Account, Log, Contract
- 订阅管理
- 心跳机制
## 启动服务器
```bash
cd /Users/chufeng/.openclaw/sanguo_projects/sanguo_vnpy_v2
# 启动 FastAPI 服务器
uvicorn sanguo_web.api:app --host 0.0.0.0 --port 8000 --reload
```
## 测试方法
### 方法 1: 使用 HTML 测试页面
1. 在浏览器中打开:
```
file:///Users/chufeng/.openclaw/sanguo_projects/sanguo_vnpy_v2/tests/websocket_test.html
```
2. 点击"连接"按钮建立 WebSocket 连接
3. 选择要订阅的数据类型:
- 行情 (Tick)
- 订单 (Order)
- 成交 (Trade)
- 持仓 (Position)
- 账户 (Account)
- 日志 (Log)
- 合约 (Contract)
4. 可选:输入品种代码(如:IF2501.CFFEX,IH2501.CFFEX)并订阅
5. 查看实时消息日志
### 方法 2: 使用 Python 测试脚本
```bash
# 安装依赖
pip install websockets
# 运行测试
cd /Users/chufeng/.openclaw/sanguo_projects/sanguo_vnpy_v2
python tests/test_websocket.py
```
测试脚本会执行以下测试:
1. 基本连接测试
2. 订阅功能测试
3. 消息接收测试
4. 心跳机制测试
5. 错误处理测试
6. 认证连接测试
### 方法 3: 使用 wscat 命令行工具
```bash
# 安装 wscat
npm install -g wscat
# 连接 WebSocket
wscat -c ws://localhost:8000/ws
# 发送订阅消息
{"type":"subscribe","data":{"subscription":["tick","order","trade"]}}
# 发送心跳
{"type":"ping","data":{}}
# 订阅品种
{"type":"subscribe_symbol","data":{"symbol":["IF2501.CFFEX"]}}
```
### 方法 4: 使用 JavaScript 控制台
在任何网页中打开浏览器控制台,运行:
```javascript
// 创建 WebSocket 连接
const ws = new WebSocket('ws://localhost:8000/ws');
// 监听连接事件
ws.onopen = () => {
console.log('Connected');
// 订阅行情数据
ws.send(JSON.stringify({
type: 'subscribe',
data: { subscription: ['tick', 'order', 'trade'] }
}));
};
// 监听消息
ws.onmessage = (event) => {
const message = JSON.parse(event.data);
console.log('Received:', message);
};
// 发送心跳
ws.send(JSON.stringify({ type: 'ping', data: {} }));
```
## WebSocket 消息格式
### 订阅消息(客户端 -> 服务器)
```json
{
"type": "subscribe",
"data": {
"subscription": ["tick", "order", "trade"]
}
}
```
### 订阅品种(客户端 -> 服务器)
```json
{
"type": "subscribe_symbol",
"data": {
"symbol": ["IF2501.CFFEX", "IH2501.CFFEX"]
}
}
```
### 心跳消息(客户端 -> 服务器)
```json
{
"type": "ping",
"data": {}
}
```
### 推送消息(服务器 -> 客户端)
```json
{
"type": "tick",
"data": {
"vt_symbol": "IF2501.CFFEX",
"symbol": "IF2501",
"exchange": "CFFEX",
"last_price": 3500.0,
"bid_price_1": 3499.0,
"ask_price_1": 3501.0,
"volume": 12345,
"datetime": "2025-01-01T09:30:00"
}
}
```
## 订阅类型
| 类型 | 说明 | 事件类型 |
|------|------|----------|
| tick | 行情数据 | eTick. |
| order | 订单数据 | eOrder. |
| trade | 成交数据 | eTrade. |
| position | 持仓数据 | ePosition. |
| account | 账户数据 | eAccount. |
| log | 日志数据 | eLog |
| contract | 合约数据 | eContract. |
## 验收标准
Phase 3 完成验收:
- [x] WebSocket 管理器完成
- [x] WebSocket 路由完成
- [x] 事件监听器完成
- [x] 心跳机制完成
- [x] 订阅管理完成
- [x] WebSocket 集成到 FastAPI
- [x] 测试脚本和页面创建
## 故障排查
### 连接失败
1. 检查服务器是否运行
2. 检查 URL 是否正确
3. 检查防火墙设置
### 没有收到消息
1. 检查是否已订阅相应数据类型
2. 检查 VeighNa 网关是否连接
3. 检查是否有行情数据
### 心跳无响应
1. 检查服务器负载
2. 检查网络连接稳定性