# fm_parser **Repository Path**: khli666/fm_parser ## Basic Information - **Project Name**: fm_parser - **Description**: fleetmind协议解析模块 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-04-11 - **Last Updated**: 2026-04-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 808协议服务器 基于JT/T 808-2011《道路运输车辆卫星定位系统终端通讯协议》的服务器实现,支持终端注册、心跳检测、位置信息解析等基本功能。 ## 功能特性 - ✅ PDF协议文档自动解析 - ✅ TCP服务器支持808协议通信 - ✅ 终端注册与鉴权管理 - ✅ 心跳检测与连接保持 - ✅ 位置信息解析与存储 - ✅ Web监控界面 - ✅ RESTful API接口 - ✅ 多终端并发支持 - ✅ 自动清理不活跃连接 ## 项目结构 ``` . ├── server/ # 服务器核心代码 │ ├── models/ # 数据模型 │ │ └── protocol.py # 协议数据模型 │ ├── handlers/ # 消息处理器 │ │ └── message_handler.py # 消息处理逻辑 │ ├── utils/ # 工具类 │ │ └── protocol_parser.py # 协议解析器 │ ├── config.py # 配置文件 │ ├── tcp_server.py # TCP服务器 │ ├── web_api.py # Web API服务器 │ └── __init__.py ├── client/ # 测试客户端 │ └── test_client.py # 测试客户端 ├── tests/ # 测试文件 ├── pdf_parser.py # PDF协议解析脚本 ├── protocol_analysis.json # 协议分析结果 ├── main.py # 主程序入口 ├── requirements.txt # Python依赖 └── README.md # 说明文档 ``` ## 快速开始 ### 1. 安装依赖 ```bash pip install -r requirements.txt ``` ### 2. 解析协议文档 ```bash python pdf_parser.py ``` 这将解析 `808技术协议规划.pdf` 并生成 `protocol_analysis.json`。 ### 3. 启动服务器 ```bash python main.py ``` 默认配置: - TCP服务器:0.0.0.0:8080 - Web监控界面:http://0.0.0.0:8081 ### 4. 使用测试客户端 ```bash # 运行综合测试 python client/test_client.py # 单独测试注册功能 python client/test_client.py --test register # 指定服务器地址 python client/test_client.py --host 127.0.0.1 --port 8080 ``` ## API接口 ### Web监控界面 访问 `http://localhost:8081` 查看实时监控界面。 ### RESTful API #### 1. 获取服务器状态 ``` GET /api/status ``` 响应示例: ```json { "host": "0.0.0.0", "port": 8080, "running": true, "client_count": 5, "terminal_count": 3, "online_count": 2 } ``` #### 2. 获取所有终端 ``` GET /api/terminals ``` #### 3. 获取特定终端信息 ``` GET /api/terminal/{terminal_id} ``` #### 4. 发送命令 ``` POST /api/command ``` 请求体示例: ```json { "type": "broadcast", "message": "系统维护通知" } ``` ## 协议支持 ### 已实现的消息类型 | 消息ID | 消息名称 | 描述 | |--------|----------|------| | 0x0100 | 注册 | 终端注册消息 | | 0x0002 | 心跳 | 终端心跳消息 | | 0x0200 | 位置信息 | 位置信息汇报 | | 0x0102 | 鉴权 | 终端鉴权 | | 0x0003 | 注销 | 终端注销 | ### 数据字段解析 #### 注册消息 (0x0100) - 省份ID (2字节) - 城市ID (2字节) - 制造商ID (5字节) - 终端型号 (20字节) - 终端ID (7字节) - 车牌颜色 (1字节) - 车牌号 (变长) #### 位置消息 (0x0200) - 报警标志 (4字节) - 状态 (4字节) - 纬度 (4字节) - 经度 (4字节) - 海拔高度 (2字节) - 速度 (2字节) - 方向 (2字节) - 时间 (6字节 BCD格式) ## 配置选项 ### 环境变量 | 变量名 | 默认值 | 描述 | |--------|--------|------| | TCP_HOST | 0.0.0.0 | TCP服务器监听地址 | | TCP_PORT | 8080 | TCP服务器监听端口 | | WEB_HOST | 0.0.0.0 | Web API服务器地址 | | WEB_PORT | 8081 | Web API服务器端口 | | LOG_LEVEL | INFO | 日志级别 | | LOG_FILE | server.log | 日志文件路径 | | MAX_CLIENTS | 1000 | 最大客户端连接数 | | HEARTBEAT_TIMEOUT | 300 | 心跳超时时间(秒) | ### 命令行参数 ```bash python main.py \ --tcp-host 0.0.0.0 \ --tcp-port 8080 \ --web-host 0.0.0.0 \ --web-port 8081 \ --log-level INFO ``` ## 扩展开发 ### 添加新的消息类型 1. 在 `server/models/protocol.py` 中添加消息类型到 `MessageType` 枚举 2. 在 `server/utils/protocol_parser.py` 中添加解析方法 3. 在 `server/handlers/message_handler.py` 中添加处理逻辑 ### 数据库集成 项目已预留数据库配置接口,可扩展支持: - PostgreSQL - MySQL - SQLite - MongoDB ### 消息持久化 修改 `MessageHandler` 类,将接收到的消息保存到数据库或文件系统。 ## 测试 运行测试: ```bash # 启动测试服务器 python main.py --tcp-port 8082 --web-port 8083 # 在另一个终端运行测试 python client/test_client.py --port 8082 ``` ## 性能优化建议 1. **连接池管理**:实现连接池减少TCP连接开销 2. **异步处理**:使用asyncio提高并发性能 3. **消息队列**:引入Redis/RabbitMQ处理高并发消息 4. **数据库优化**:使用连接池和索引优化查询性能 5. **缓存机制**:使用Redis缓存频繁访问的数据 ## 故障排除 ### 常见问题 1. **端口被占用** ```bash # 查看端口占用 lsof -i :8080 # 或 netstat -tlnp | grep 8080 ``` 2. **连接超时** - 检查防火墙设置 - 确认服务器IP和端口正确 - 检查网络连通性 3. **协议解析错误** - 确认客户端使用正确的协议格式 - 检查消息转义处理 - 验证消息长度和校验和 ### 日志查看 ```bash # 查看服务器日志 tail -f server.log # 查看特定级别的日志 grep "ERROR" server.log grep "WARNING" server.log ``` ## 许可证 MIT License ## 贡献指南 1. Fork 项目 2. 创建功能分支 3. 提交更改 4. 推送到分支 5. 创建Pull Request ## 联系方式 如有问题或建议,请提交Issue或联系维护者。