范围:src/gateway/chat/ - 新增 ChatWebSocketGateway WebSocket 网关,处理实时聊天通信 - 新增 ChatController HTTP 控制器,提供聊天历史和系统状态接口 - 新增 ChatGatewayModule 模块配置,整合网关层组件 - 新增请求/响应 DTO 定义,提供数据验证和类型约束 - 新增完整的单元测试覆盖 - 新增模块 README 文档,包含接口说明、核心特性和风险评估
11 KiB
11 KiB
聊天网关模块 (Chat Gateway Module)
聊天网关模块是聊天系统的协议入口,负责处理 WebSocket 和 HTTP 请求,提供统一的 API 接口。作为 Gateway Layer 的核心组件,它专注于协议转换和路由管理,将客户端请求转发到 Business Layer 处理,不包含业务逻辑。
架构层级
Gateway Layer(网关层)
职责定位
网关层负责:
- 协议处理:处理 WebSocket 和 HTTP 请求
- 数据验证:使用 DTO 进行请求参数验证
- 路由管理:定义 API 端点和消息路由
- 错误转换:将业务错误转换为协议响应
模块组成
src/gateway/chat/
├── chat.gateway.ts # WebSocket 网关
├── chat.controller.ts # HTTP 控制器
├── chat.gateway.module.ts # 网关模块配置
├── chat.dto.ts # 请求 DTO
├── chat_response.dto.ts # 响应 DTO
└── README.md # 模块文档
依赖关系
Gateway Layer (chat.gateway.module)
↓ 依赖
Business Layer (chat.module)
↓ 依赖
Core Layer (zulip_core.module, redis.module)
对外提供的接口
ChatWebSocketGateway 类
sendToPlayer(socketId: string, data: any): void
向指定玩家的 WebSocket 连接发送消息,用于单播通信。
broadcastToMap(mapId: string, data: any, excludeId?: string): void
向指定地图内的所有玩家广播消息,支持排除特定玩家。
getConnectionCount(): number
获取当前 WebSocket 总连接数,用于监控和统计。
getAuthenticatedConnectionCount(): number
获取已认证的 WebSocket 连接数,用于在线玩家统计。
getMapPlayerCounts(): Record<string, number>
获取各地图的在线玩家数量统计,用于负载监控。
getMapPlayers(mapId: string): string[]
获取指定地图内的所有玩家用户名列表,用于房间成员查询。
ChatController 类
getChatHistory(query: GetChatHistoryDto): Promise
获取聊天历史记录,支持按地图筛选和分页查询。
getSystemStatus(): Promise
获取聊天系统状态,包括 WebSocket 连接数、Zulip 状态、内存使用等。