名称: socketio 描述: Socket.io 房间、命名空间、适配器、中间件和实时模式。 允许工具: 读取、写入、编辑、Bash、Glob、Grep
Socket.io 技能
为使用 Socket.io 构建实时应用程序提供专家级协助。
能力
- 配置 Socket.io 服务器
- 实现房间和命名空间
- 使用 Redis 适配器进行扩展
- 处理身份验证中间件
- 构建事件驱动模式
- 实现确认机制
用法
当您需要时调用此技能:
- 构建实时应用程序
- 实现聊天室
- 扩展 WebSocket 服务器
- 处理复杂的事件模式
服务器设置
import { Server } from 'socket.io';
import { createAdapter } from '@socket.io/redis-adapter';
import { createClient } from 'redis';
const io = new Server(httpServer, {
cors: { origin: '*' },
});
// 用于扩展的 Redis 适配器
const pubClient = createClient({ url: process.env.REDIS_URL });
const subClient = pubClient.duplicate();
io.adapter(createAdapter(pubClient, subClient));
// 身份验证中间件
io.use((socket, next) => {
const token = socket.handshake.auth.token;
try {
socket.user = verifyToken(token);
next();
} catch {
next(new Error('身份验证失败'));
}
});
// 命名空间
const chatNamespace = io.of('/chat');
chatNamespace.on('connection', (socket) => {
socket.on('join-room', (roomId) => {
socket.join(roomId);
socket.to(roomId).emit('user-joined', socket.user);
});
socket.on('message', ({ roomId, content }) => {
io.to(roomId).emit('message', {
user: socket.user,
content,
timestamp: Date.now(),
});
});
});
最佳实践
- 使用命名空间进行分离
- 使用房间进行分组
- 使用 Redis 适配器进行扩展
- 优雅地处理断开连接
目标流程
- 实时应用程序
- 聊天实现
- 协作功能