103 lines
2.0 KiB
Markdown
103 lines
2.0 KiB
Markdown
# UDP数据采集服务器
|
|
|
|
这是一个基于Python异步IO的UDP数据采集服务器,用于接收、处理和转发实验设备的传感器数据。
|
|
|
|
## 主要功能
|
|
|
|
- 接收并解析设备传感器数据
|
|
- 自动识别和管理设备序列号
|
|
- 实时监控活跃实验状态
|
|
- 数据存储到Redis流
|
|
- 通过WebSocket实时转发数据
|
|
- 支持数据降采样处理
|
|
- 自动重连和错误恢复机制
|
|
|
|
## 系统要求
|
|
|
|
- Python 3.7+
|
|
- MongoDB
|
|
- Redis
|
|
- 相关Python包依赖:
|
|
- motor
|
|
- websockets
|
|
- redis
|
|
- asyncio
|
|
|
|
## 配置说明
|
|
|
|
### MongoDB配置
|
|
```python
|
|
mongodb_url = "mongodb://lab:password@host:27017/lab"
|
|
```
|
|
|
|
### Redis配置
|
|
```python
|
|
redis_url = 'redis://host:6379'
|
|
redis_password = 'password'
|
|
redis_db = 200
|
|
```
|
|
|
|
### 服务器配置
|
|
```python
|
|
host = '0.0.0.0'
|
|
port = 6002
|
|
```
|
|
|
|
## 数据流程
|
|
|
|
1. 设备通过UDP发送数据包到服务器
|
|
2. 服务器解析数据包,识别设备序列号
|
|
3. 查询设备对应的活跃实验
|
|
4. 将数据存储到Redis流
|
|
5. 通过WebSocket实时转发处理后的数据
|
|
|
|
## 主要类和方法
|
|
|
|
### UDPServer
|
|
- `init_mongodb()`: 初始化MongoDB连接
|
|
- `init_redis()`: 初始化Redis连接
|
|
- `update_active_experiments()`: 更新活跃实验信息
|
|
- `process_and_forward_data()`: 处理和转发数据
|
|
- `handle_sensor_data()`: 处理传感器数据
|
|
- `batch_redis_write()`: 批量写入Redis
|
|
|
|
## 运行方式
|
|
|
|
```bash
|
|
python data.py
|
|
```
|
|
|
|
## 数据格式
|
|
|
|
### 传感器数据包格式
|
|
|
|
### WebSocket消息格式
|
|
```json
|
|
{
|
|
"type": "data_batch",
|
|
"data_points": [
|
|
{
|
|
"sensor_data": {
|
|
"sensor_name": value
|
|
},
|
|
"timestamp": timestamp
|
|
}
|
|
],
|
|
"serial_number": "device_serial",
|
|
"total_points": count
|
|
}
|
|
```
|
|
|
|
## 错误处理
|
|
|
|
- 自动重连机制
|
|
- 数据校验
|
|
- 异常捕获和日志记录
|
|
- 优雅关闭处理
|
|
|
|
## 注意事项
|
|
|
|
1. 确保MongoDB和Redis服务正常运行
|
|
2. 检查网络防火墙设置,确保UDP端口开放
|
|
3. 监控服务器资源使用情况
|
|
4. 定期检查日志文件 |