Files
vibe_coding/.cursor/skills/websocket-service/SKILL.md
2026-03-05 21:27:11 +08:00

54 lines
1.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
name: websocket-service
version: 1.0.0
description: "在 Hyperf 中搭建 Swoole WebSocket 服务器。当需要实时通信、消息推送或通知功能时使用。含心跳检测和前端集成。"
---
# Swoole WebSocket Service
## 触发条件
用户需要实时通信功能:通知推送、在线状态、实时数据更新、聊天功能。
## 执行流程
### Phase 0: 加载规范
读取 `.cursor/rules/016-swoole.mdc``013-backend.mdc`,提取 WebSocket 配置、协程安全、fd 存储、心跳、认证鉴权。
### Phase 1: 服务端配置
`config/autoload/server.php` 添加 ws 服务type SERVER_WEBSOCKETport 环境变量callbacks ON_HAND_SHAKE/ON_MESSAGE/ON_CLOSE。
### Phase 2: 连接管理器
WebSocketConnectionManagerRedis 存储 fd→userId/serverIduserId→{serverId:fd} 集合。addConnection、removeConnection、getUserConnections、getUserIdByFd、isOnline。支持多服务器。
### Phase 3: WebSocket Controller
OnOpenquery token 验证 JWT无效 closeaddConnectionpush connected。OnMessageping→pong。OnCloseremoveConnection。
### Phase 4: 消息推送服务
WebSocketPushServicepushToUser、pushToUsers、broadcastRedis publish 跨服。Inject Sender、ConnectionManager。
### Phase 5: 前端客户端
WebSocketClientconnect(url?token=)、on(type, callback)、心跳 30s、断线指数退避重连。完整实现见 **Tier 3**
## 验证
1. [ ] WebSocket 在配置端口启动
2. [ ] Token 认证成功才连接
3. [ ] 无效 Token 立即断开
4. [ ] 心跳 30s 正常
5. [ ] 断线自动重连
6. [ ] 连接信息存 Redis
7. [ ] 推送正确到达目标用户
## Tier 3 深度参考
| 文件 | 内容 |
|------|------|
| `references/ws-implementation.md` | 配置、ConnectionManager、Controller、PushService、前端 Client 完整代码 |