105 lines
2.4 KiB
Plaintext
105 lines
2.4 KiB
Plaintext
|
|
---
|
|||
|
|
description:
|
|||
|
|
globs:
|
|||
|
|
alwaysApply: false
|
|||
|
|
---
|
|||
|
|
# WebSocket通信
|
|||
|
|
|
|||
|
|
村客宝系统使用WebSocket实现实时通信功能,主要用于设备状态监控和消息实时推送。
|
|||
|
|
|
|||
|
|
## WebSocket服务
|
|||
|
|
|
|||
|
|
系统使用ThinkPHP的think-worker扩展实现WebSocket服务:
|
|||
|
|
|
|||
|
|
- 服务配置:[config/worker.php](mdc:config/worker.php)和[config/worker_server.php](mdc:config/worker_server.php)
|
|||
|
|
- Gateway配置:[config/gateway_worker.php](mdc:config/gateway_worker.php)
|
|||
|
|
|
|||
|
|
## WebSocket控制器
|
|||
|
|
|
|||
|
|
WebSocket服务主要通过以下文件实现:
|
|||
|
|
|
|||
|
|
- [application/api/controller/WebSocketController.php](mdc:application/api/controller/WebSocketController.php) - WebSocket控制器
|
|||
|
|
- [application/common/socket/](mdc:application/common/socket) - WebSocket核心实现
|
|||
|
|
|
|||
|
|
## 消息格式
|
|||
|
|
|
|||
|
|
WebSocket消息使用JSON格式,基本结构如下:
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"type": "message_type", // 消息类型
|
|||
|
|
"data": {}, // 消息数据
|
|||
|
|
"time": 1628160000 // 时间戳
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 常用消息类型
|
|||
|
|
|
|||
|
|
- `device_status` - 设备状态更新
|
|||
|
|
- `wechat_login` - 微信登录状态更新
|
|||
|
|
- `new_message` - 新消息通知
|
|||
|
|
- `task_status` - 任务状态更新
|
|||
|
|
- `error` - 错误消息
|
|||
|
|
|
|||
|
|
## 客户端连接
|
|||
|
|
|
|||
|
|
客户端可以通过以下方式连接WebSocket服务:
|
|||
|
|
|
|||
|
|
```javascript
|
|||
|
|
const ws = new WebSocket('ws://{host}/ws');
|
|||
|
|
|
|||
|
|
ws.onopen = function() {
|
|||
|
|
console.log('Connected to WebSocket server');
|
|||
|
|
// 发送认证消息
|
|||
|
|
ws.send(JSON.stringify({
|
|||
|
|
type: 'auth',
|
|||
|
|
data: {
|
|||
|
|
token: 'YOUR_AUTH_TOKEN'
|
|||
|
|
}
|
|||
|
|
}));
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
ws.onmessage = function(event) {
|
|||
|
|
const message = JSON.parse(event.data);
|
|||
|
|
console.log('Received message:', message);
|
|||
|
|
|
|||
|
|
// 根据消息类型处理
|
|||
|
|
switch(message.type) {
|
|||
|
|
case 'device_status':
|
|||
|
|
// 处理设备状态更新
|
|||
|
|
break;
|
|||
|
|
case 'new_message':
|
|||
|
|
// 处理新消息
|
|||
|
|
break;
|
|||
|
|
// ...其他消息类型
|
|||
|
|
}
|
|||
|
|
};
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## WebSocket命令
|
|||
|
|
|
|||
|
|
系统提供命令行工具管理WebSocket服务:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 启动WebSocket服务
|
|||
|
|
php think worker:server start
|
|||
|
|
|
|||
|
|
# 停止WebSocket服务
|
|||
|
|
php think worker:server stop
|
|||
|
|
|
|||
|
|
# 重启WebSocket服务
|
|||
|
|
php think worker:server restart
|
|||
|
|
|
|||
|
|
# 查看WebSocket服务状态
|
|||
|
|
php think worker:server status
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 消息推送服务
|
|||
|
|
|
|||
|
|
系统使用队列实现消息的异步推送:
|
|||
|
|
|
|||
|
|
- 队列配置:[config/queue.php](mdc:config/queue.php)
|
|||
|
|
- 消息推送任务:[application/job/](mdc:application/job)
|
|||
|
|
|
|||
|
|
通过队列可以实现高效的消息推送,避免阻塞主进程。
|