# WebSocket Server 说明文档 ## 1. 概述 WebSocket Server 是基于 Ratchet 库实现的纯 PHP WebSocket 服务器,主要用于为智能客服系统提供实时通信支持,特别是为不支持 EventSource 的微信小程序提供流式请求处理能力。 ## 2. 安装与依赖 ### 2.1 依赖库 - **Ratchet**: 纯 PHP WebSocket 实现库 ```bash composer require cboden/ratchet ``` ### 2.2 环境要求 - PHP 7.4+ - Composer - ThinkPHP 6.x ## 3. 服务器文件结构 ### 3.1 核心文件 - **启动脚本**: `src/ws_server.php` - WebSocket 服务器主启动文件 - **智能客服控制器**: `src/addon/aikefu/api/controller/WebSocket.php` - aikefu 插件的 WebSocket 控制器实现 ### 3.2 目录结构 ``` ├── backend/ │ ├── docs/ │ │ └── websocket/ │ │ └── README.md # 本文档 │ └── src/ │ ├── ws_server.php # WebSocket 服务器启动脚本 │ └── addon/ │ └── aikefu/ │ └── api/ │ └── controller/ │ └── WebSocket.php # aikefu 插件 WebSocket 控制器 ``` ## 4. 服务器启动与配置 ### 4.1 启动命令 在 `src` 目录下执行: ```bash php ws_server.php ``` ### 4.2 默认配置 - **监听地址**: `0.0.0.0` (所有网络接口) - **端口**: `8080` - **WebSocket 地址**: `ws://localhost:8080` ### 4.3 自定义配置 可以在 `ws_server.php` 中修改以下配置: ```php // 配置WebSocket服务器 $httpHost = 'localhost'; // 客户端连接时使用的主机名 $port = 8080; // WebSocket服务器端口 $address = '0.0.0.0'; // 监听所有网络接口 ``` ## 5. WebSocket 路径 ### 5.1 默认测试路径 - **路径**: `/ws` - **功能**: 用于测试 WebSocket 连接 - **示例**: `ws://localhost:8080/ws` ### 5.2 智能客服路径 - **路径**: `/ws/aikefu` - **功能**: 智能客服聊天功能接口 - **示例**: `ws://localhost:8080/ws/aikefu` ## 6. 消息格式 ### 6.1 客户端发送消息格式 ```json { "message": "用户输入的消息", "token": "用户认证令牌", "session_id": "会话ID", "action": "chat" // 动作类型 } ``` ### 6.2 服务器响应消息格式 #### 聊天响应 ```json { "type": "chat", "message": "客服回复的消息内容", "session_id": "会话ID", "complete": false // 是否完成响应 } ``` #### 错误响应 ```json { "type": "error", "message": "错误信息描述", "code": "错误代码" } ``` #### 系统消息 ```json { "type": "system", "message": "系统消息内容" } ``` ## 7. 客户端使用示例 ### 7.1 JavaScript 示例 ```javascript // 创建WebSocket连接 const ws = new WebSocket('ws://localhost:8080/ws/aikefu'); // 连接打开时 ws.onopen = function(event) { console.log('WebSocket连接已打开'); // 发送聊天消息 ws.send(JSON.stringify({ message: '你好', token: 'user_token_here', session_id: 'session_123', action: 'chat' })); }; // 接收消息 ws.onmessage = function(event) { const data = JSON.parse(event.data); console.log('收到消息:', data); if (data.type === 'chat') { // 处理聊天消息 console.log('客服回复:', data.message); if (data.complete) { console.log('对话完成'); } } else if (data.type === 'error') { // 处理错误 console.error('错误:', data.message); } }; // 连接关闭时 ws.onclose = function(event) { console.log('WebSocket连接已关闭'); }; // 连接错误时 ws.onerror = function(error) { console.error('WebSocket错误:', error); }; ``` ### 7.2 微信小程序示例 ```javascript // 创建WebSocket连接 const ws = wx.connectSocket({ url: 'ws://localhost:8080/ws/aikefu', header: { 'content-type': 'application/json' } }); // 连接打开时 wx.onSocketOpen(function(res) { console.log('WebSocket连接已打开', res); // 发送聊天消息 wx.sendSocketMessage({ data: JSON.stringify({ message: '你好', token: 'user_token_here', session_id: 'session_123', action: 'chat' }) }); }); // 接收消息 wx.onSocketMessage(function(res) { const data = JSON.parse(res.data); console.log('收到消息:', data); if (data.type === 'chat') { // 处理聊天消息 console.log('客服回复:', data.message); if (data.complete) { console.log('对话完成'); } } else if (data.type === 'error') { // 处理错误 console.error('错误:', data.message); } }); // 连接关闭时 wx.onSocketClose(function(res) { console.log('WebSocket连接已关闭', res); }); // 连接错误时 wx.onSocketError(function(res) { console.error('WebSocket错误:', res); }); ``` ## 8. 功能特性 ### 8.1 实时通信 - 支持双向实时通信 - 消息即时推送 - 支持流式响应 ### 8.2 智能客服集成 - 与现有智能客服系统无缝集成 - 支持上下文会话管理 - 支持多用户并发访问 ### 8.3 插件化设计 - 支持为不同插件注册独立的 WebSocket 控制器 - 路径格式:`/ws/{addon_name}` - 便于扩展其他插件的 WebSocket 支持 ## 9. 故障排除 ### 9.1 常见问题 #### 问题:服务器无法启动 **可能原因**: - 端口被占用 - 依赖库未安装 - PHP 版本不兼容 **解决方案**: - 检查端口占用情况:`netstat -an | findstr 8080` - 重新安装依赖:`composer install` - 确保 PHP 版本 >= 7.4 #### 问题:客户端无法连接 **可能原因**: - 服务器未启动 - 网络防火墙限制 - WebSocket 地址错误 **解决方案**: - 确认服务器已启动 - 检查防火墙设置,确保端口 8080 开放 - 验证 WebSocket 地址格式 #### 问题:消息发送失败 **可能原因**: - 消息格式错误 - 认证失败 - 服务器内部错误 **解决方案**: - 检查消息格式是否符合要求 - 验证用户认证信息 - 查看服务器日志获取详细错误信息 ### 9.2 日志查看 服务器启动时会输出详细日志,包括: - 已注册的 WebSocket 控制器 - 连接信息 - 错误信息 ## 10. 扩展开发 ### 10.1 为其他插件添加 WebSocket 支持 1. 在插件目录下创建 WebSocket 控制器: ``` addon/{addon_name}/api/controller/WebSocket.php ``` 2. 实现 MessageComponentInterface 接口: ```php clients = new \SplObjectStorage; } public function onOpen(ConnectionInterface $conn) { // 处理连接打开 } public function onMessage(ConnectionInterface $conn, $msg) { // 处理收到的消息 } public function onClose(ConnectionInterface $conn) { // 处理连接关闭 } public function onError(ConnectionInterface $conn, \Exception $e) { // 处理错误 } } ``` 3. 重启 WebSocket 服务器,新插件的 WebSocket 控制器将自动注册到 `/ws/{addon_name}` 路径 ## 11. 版本历史 | 版本 | 日期 | 说明 | |------|------|------| | v1.0 | 2025-12-19 | 初始版本,支持智能客服系统的 WebSocket 通信 | ## 12. 联系方式 如有问题或建议,请联系技术支持团队。