Files
whale-town-end/src/gateway/chat/README.md
moyin 5bcf3cb678 feat(gateway/chat): 新增聊天网关模块
范围:src/gateway/chat/
- 新增 ChatWebSocketGateway WebSocket 网关,处理实时聊天通信
- 新增 ChatController HTTP 控制器,提供聊天历史和系统状态接口
- 新增 ChatGatewayModule 模块配置,整合网关层组件
- 新增请求/响应 DTO 定义,提供数据验证和类型约束
- 新增完整的单元测试覆盖
- 新增模块 README 文档,包含接口说明、核心特性和风险评估
2026-01-14 19:11:25 +08:00

11 KiB
Raw Blame History

聊天网关模块 (Chat Gateway Module)

聊天网关模块是聊天系统的协议入口,负责处理 WebSocket 和 HTTP 请求,提供统一的 API 接口。作为 Gateway Layer 的核心组件,它专注于协议转换和路由管理,将客户端请求转发到 Business Layer 处理,不包含业务逻辑。

架构层级

Gateway Layer网关层

职责定位

网关层负责:

  1. 协议处理:处理 WebSocket 和 HTTP 请求
  2. 数据验证:使用 DTO 进行请求参数验证
  3. 路由管理:定义 API 端点和消息路由
  4. 错误转换:将业务错误转换为协议响应

模块组成

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 状态、内存使用等。

getWebSocketInfo(): Promise