# terminal **Repository Path**: tommickey/terminal ## Basic Information - **Project Name**: terminal - **Description**: websocket终端模拟器 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-06-21 - **Last Updated**: 2025-06-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # WebSocket终端设备客户端 ## 概述 这是一个符合WebSocket终端设备规范的客户端实现,用于连接WebSocket服务器并发送传感器数据。 ## 主要特性 ### ✅ 符合WebSocket终端设备规范 1. **WebSocket原生ping/pong心跳机制** - 使用WebSocket协议原生的ping/pong帧 - 不再使用应用层ping/pong事件 - 90秒心跳超时检测 2. **标准连接参数** - 读取超时:90秒 - 普通消息写入超时:60秒 - 二进制数据写入超时:300秒 - 最大消息大小:512KB - 读写缓冲区:32KB 3. **标准认证机制** - HTTP登录获取Token - WebSocket连接时携带Authorization头 - 自动Token刷新机制 4. **标准数据格式** - 二进制数据包格式完全符合规范 - CRC16-MODBUS校验 - 固定头部28字节 + 数据包 + CRC2字节 ## 系统改进 ### 🔄 心跳机制优化 - **修改前**:使用应用层ping/pong事件 - **修改后**:使用WebSocket原生ping/pong帧 - **优势**:更稳定、更高效、符合WebSocket标准 ### ⏱️ 超时配置标准化 - **读取超时**:60秒 → 90秒 - **心跳超时**:60秒 → 90秒 - **二进制数据写入超时**:新增300秒 - **ping发送超时**:优化为3秒,避免阻塞数据流 ### 🗑️ 移除冗余代码 - 删除应用层ping事件处理 - 删除PingResponse类型定义 - 简化消息处理逻辑 ## 配置说明 ### config.yaml ```yaml # 设备配置 equipment: id: "设备唯一标识" type: "设备类型" sensor_count: 40 # 服务器配置 server: websocket_url: "ws://host:port/api/v1/websocket" http_login_url: "http://host:port/api/v1/system/login" # 认证配置 auth: username: "用户名" password: "密码" # 流配置 streaming: interval_ms: 1000 # 发送间隔(毫秒) position_increment: 1 # 位置增量 reconnect_interval_minutes: 5 # 重连间隔(分钟) heartbeat_interval_seconds: 30 # 心跳间隔(秒) retry_interval_seconds: 5 # 重试间隔(秒) check_interval_seconds: 10 # 检查间隔(秒) # Token配置 token: refresh_interval_seconds: 3600 # 刷新间隔(秒) refresh_threshold_seconds: 300 # 刷新阈值(秒) max_refresh_retries: 3 # 最大刷新重试次数 ``` ## 运行模式 ### Docker容器模式 ```bash export DOCKER_CONTAINER=true go run main.go ``` - 自动开始发送数据流 - 适合生产环境部署 ### 本地交互模式 ```bash go run main.go ``` - 显示交互式菜单 - 支持手动控制数据流 - 适合开发和测试 ## 数据格式 ### 二进制数据包结构 ``` [固定头部(28字节)] + [数据包] + [CRC(2字节)] ``` ### 固定头部(28字节) | 字段 | 偏移 | 长度 | 类型 | 说明 | |------|------|------|------|------| | code | 0-1 | 2 | uint16 | 固定值: 0xaa55 | | sessionId | 2-13 | 12 | string | 会话ID: "123456789000" | | datetime | 14-21 | 8 | uint64 | Unix时间戳 | | number | 22-23 | 2 | uint16 | 序列号 | | length | 24-27 | 4 | uint32 | 数据包长度 | ### 数据包内容 - **位置数据(32字节)**:8个uint32值,表示波形图横坐标 - **传感器数据**:8次采样,每次采样sensorCount个传感器的数据 - **CRC校验**:CRC16-MODBUS算法,大端序 ## 错误处理 ### 重连机制 - 指数退避重试策略 - 最大重连次数限制 - 自动重新注册设备 ### 错误恢复 - 连接断开自动重连 - Token过期自动刷新 - 心跳超时自动恢复 ## 监控和日志 ### 关键日志点 - 连接建立/断开 - 消息发送/接收 - 心跳检测 - 错误发生/恢复 - 数据流开始/停止 ### 性能指标 - 数据包发送频率 - 连接稳定性 - 错误发生率 - 重连成功率 ## 兼容性 ### 完全兼容的部分 - ✅ 认证机制 - ✅ 连接参数 - ✅ 基础消息格式 - ✅ 设备注册/注销 - ✅ 二进制数据格式 - ✅ 心跳机制(WebSocket原生ping/pong) ### 设备端特有的部分 - 自动重连机制 - 指数退避重试 - Docker容器模式 - 本地交互模式 ## 部署建议 1. **生产环境**:使用Docker容器模式 2. **开发环境**:使用本地交互模式 3. **配置管理**:使用环境变量覆盖敏感配置 4. **监控**:启用详细日志记录 5. **安全**:使用WSS加密连接 ## 故障排除 ### 常见问题 1. **连接频繁断开**:检查心跳超时配置 2. **数据丢失**:检查缓冲区大小设置 3. **认证失败**:检查token有效性 4. **性能问题**:检查协程池配置 ### 调试方法 - 启用详细日志记录 - 监控心跳检测日志 - 检查网络连接状态 - 分析错误响应码