# 红绿灯信号集成系统部署指南 ## 概述 本文档描述了红绿灯信号集成系统的部署步骤和配置说明。该系统通过TCP服务器接收红绿灯硬件信号,解析后通过WebSocket广播给前端客户端。 ## 系统架构 ``` 红绿灯硬件 → TCP服务器(8082) → 信号解析器 → 数据处理服务 → WebSocket广播 → 前端客户端 ↓ 数据库(路口/设备管理) ``` ## 部署前准备 ### 1. 环境要求 - **Java**: JDK 17 或更高版本 - **数据库**: PostgreSQL 12+ (已启用PostGIS扩展) - **Redis**: 6.0+ (用于缓存) - **网络**: 确保8082端口可用于TCP连接 ### 2. 数据库初始化 执行以下SQL脚本初始化红绿灯相关表: ```bash # 1. 创建红绿灯系统表 psql -h localhost -U postgres -d qaup_database -f sql/create_traffic_light_tables.sql # 2. 验证数据完整性 psql -h localhost -U postgres -d qaup_database -f sql/validate_traffic_light_data.sql ``` ### 3. 配置文件设置 在 `application.yml` 中配置红绿灯系统参数: ```yaml # 红绿灯系统配置 traffic: light: tcp: # 是否启用TCP服务器 enabled: true # TCP监听端口 port: 8082 # 最大连接数 max-connections: 50 # 连接超时时间(毫秒) connection-timeout: 30000 # 心跳超时时间(分钟) heartbeat-timeout-minutes: 5 intersection: # 默认路口ID(当信号中没有指定时使用) default-id: "DEFAULT_INTERSECTION" # 默认坐标 default-latitude: 0.0 default-longitude: 0.0 processing: # 是否启用统计功能 enable-statistics: true # 统计信息输出间隔(毫秒) statistics-interval: 60000 # 是否启用调试日志 enable-debug-log: false ``` ## 部署步骤 ### 1. 编译和打包 ```bash # 编译项目 mvn clean compile # 运行测试 mvn test # 打包应用 mvn clean package -DskipTests ``` ### 2. 启动应用 ```bash # 方式1: 直接运行JAR包 java -jar qaup-admin/target/qaup-admin.jar # 方式2: 使用Spring Boot Maven插件 mvn spring-boot:run -pl qaup-admin # 方式3: 使用Docker (如果有Docker配置) docker-compose up -d ``` ### 3. 验证部署 #### 检查TCP服务器状态 ```bash # 检查端口是否监听 netstat -tlnp | grep 8082 # 或使用ss命令 ss -tlnp | grep 8082 ``` #### 检查应用健康状态 ```bash # 访问健康检查接口 curl http://localhost:8080/health # 检查红绿灯系统状态 curl http://localhost:8080/health/traffic-light ``` #### 检查WebSocket连接 ```bash # 访问WebSocket测试页面 http://localhost:8080/websocket-test.html ``` ## 配置管理 ### 1. 路口信息管理 通过REST API管理路口信息: ```bash # 查看所有路口 curl http://localhost:8080/api/intersections # 添加新路口 curl -X POST http://localhost:8080/api/intersections \ -H "Content-Type: application/json" \ -d '{ "intersectionId": "INTERSECTION_003", "intersectionName": "新路口", "latitude": 39.9060, "longitude": 116.4090, "areaCode": "AREA_C" }' # 查看特定路口 curl http://localhost:8080/api/intersections/INTERSECTION_001 ``` ### 2. 红绿灯设备管理 ```bash # 查看所有设备 curl http://localhost:8080/api/traffic-lights # 添加新设备 curl -X POST http://localhost:8080/api/traffic-lights \ -H "Content-Type: application/json" \ -d '{ "deviceId": "TL_003", "deviceName": "新红绿灯设备", "intersectionId": "INTERSECTION_003", "manufacturer": "海康威视", "model": "DS-TL300" }' # 查看设备状态 curl http://localhost:8080/api/traffic-lights/TL_001/status ``` ## 测试和验证 ### 1. 使用测试客户端 运行提供的Python测试客户端: ```bash # 安装Python依赖(如果需要) pip3 install socket json # 运行测试客户端 python3 test_traffic_light_client.py ``` ### 2. 手动发送测试信号 使用telnet或nc命令手动发送信号: ```bash # 使用telnet telnet localhost 8082 # 发送JSON信号(在telnet会话中) {"device_id":"TL_001","DI-01":0,"DI-02":0,"DI-11":1,"DI-12":0,"DI-13":0,"DI-14":0,"DI-15":0,"DI-16":1,"DI-17":0,"DI-18":0} # 使用nc命令 echo '{"device_id":"TL_001","DI-11":1,"DI-16":1}' | nc localhost 8082 ``` ### 3. 监控WebSocket消息 在浏览器中打开开发者工具,连接到WebSocket端点: ```javascript const ws = new WebSocket('ws://localhost:8080/collision'); ws.onmessage = function(event) { const message = JSON.parse(event.data); if (message.type === 'intersection_traffic_light_status') { console.log('红绿灯状态更新:', message.payload); } }; ``` ## 故障排除 ### 1. TCP服务器无法启动 **问题**: 端口8082被占用 ```bash # 查找占用端口的进程 lsof -i :8082 # 杀死占用进程 kill -9 ``` **问题**: 权限不足 ```bash # 使用sudo运行或更改端口到1024以上 ``` ### 2. 数据库连接问题 **问题**: 无法连接到PostgreSQL ```bash # 检查数据库服务状态 systemctl status postgresql # 检查连接配置 psql -h localhost -U postgres -d qaup_database -c "SELECT 1;" ``` ### 3. 信号解析错误 **问题**: JSON格式错误 - 检查发送的JSON格式是否正确 - 查看应用日志中的解析错误信息 - 使用JSON验证工具验证格式 ### 4. WebSocket连接问题 **问题**: 前端无法接收消息 - 检查WebSocket连接是否建立成功 - 验证消息类型过滤是否正确 - 查看浏览器控制台错误信息 ## 性能监控 ### 1. 关键指标 - **TCP连接数**: 当前活跃的红绿灯设备连接数 - **信号处理速度**: 每秒处理的信号数量 - **解析成功率**: 成功解析的信号比例 - **WebSocket客户端数**: 连接的前端客户端数量 ### 2. 监控接口 ```bash # 系统整体状态 curl http://localhost:8080/health # 红绿灯系统统计 curl http://localhost:8080/api/traffic-lights/statistics # TCP服务器状态 curl http://localhost:8080/api/traffic-lights/server/status ``` ### 3. 日志监控 重要日志文件和关键字: ```bash # 查看TCP服务器日志 grep "TrafficLightTcpServer" logs/application.log # 查看信号解析日志 grep "TrafficLightSignalParser" logs/application.log # 查看WebSocket广播日志 grep "TrafficLightStatusEventListener" logs/application.log ``` ## 安全考虑 ### 1. 网络安全 - 限制8082端口的访问来源 - 使用防火墙规则保护TCP端口 - 考虑使用TLS加密TCP连接(如果硬件支持) ### 2. 数据验证 - 验证设备ID的合法性 - 检查信号数据的合理性 - 记录异常信号和可疑连接 ### 3. 访问控制 - 为管理API添加认证机制 - 限制WebSocket连接的来源 - 定期审查设备注册信息 ## 维护和升级 ### 1. 定期维护 - 清理过期的连接记录 - 检查数据库表的性能 - 更新设备心跳状态 - 备份路口和设备配置 ### 2. 系统升级 - 在升级前备份数据库 - 测试新版本的兼容性 - 逐步升级,避免服务中断 - 验证升级后的功能完整性 ### 3. 容量规划 - 监控系统资源使用情况 - 根据设备数量调整连接池大小 - 优化数据库查询性能 - 考虑水平扩展方案 ## 联系支持 如遇到部署问题,请提供以下信息: 1. 系统环境信息(OS、Java版本等) 2. 错误日志和堆栈跟踪 3. 配置文件内容 4. 网络环境描述 5. 复现步骤 --- **版本**: 1.0.0 **更新日期**: 2025-01-05 **维护团队**: QAUP开发团队