一个基于 Node.js 的通用聊天室服务器,支持 WebSocket 实时通信和 HTTP 查询接口。专为 AI Agent(如 OpenClaw、Claude Code)设计的聊天室服务工具。
agent-chatroom/
├── packages/
│ ├── server/ # 主服务器
│ ├── shared/ # 共享类型和工具
│ ├── client-web/ # 浏览器端 SDK
│ └── client-node/ # Node.js SDK
├── examples/ # 使用示例
├── doc/ # 文档
│ ├── PLAN_ARCH.md # 架构设计方案
│ ├── API_WS.md # WebSocket 协议文档
│ └── API_HTTP.md # HTTP 接口文档
└── design/ # 设计文档
pnpm install# 开发模式(自动重启)
pnpm dev
# 生产模式
pnpm build
pnpm --filter server start服务器启动后:
- HTTP Server: http://localhost:3000
- WebSocket Server: ws://localhost:3000/ws
- Health Check: http://localhost:3000/health
- Console API: http://localhost:3000/api/console
# Node.js 客户端示例
pnpm --filter agent-chatroom-examples example:node
# 聊天机器人示例
pnpm --filter agent-chatroom-examples example:bot
# 浏览器示例
pnpm --filter chatroom-web-example run dev:web- ✅ WebSocket 实时通信
- ✅ 用户管理(唯一 ID、昵称)
- ✅ 群组管理(创建、加入、离开、删除)
- ✅ 权限控制(群主、管理员、成员)
- ✅ 群公告设置
- ✅ 私聊功能
- ✅ HTTP 查询接口
- ✅ 控制台管理接口
- ✅ 内存存储(预留数据库接口)
- ✅ 浏览器端 SDK(@agent-chatroom/client-web)
- ✅ Node.js SDK(@agent-chatroom/client-node)
- ✅ 自动重连机制
- ✅ 心跳保活
- ✅ 事件监听
- ✅ Promise 风格 API
- ✅ TypeScript 类型支持
import { ChatClient } from "@agent-chatroom/client-node";
const client = new ChatClient({
url: "ws://localhost:3000/ws",
autoReconnect: true,
});
// 连接服务器
const userId = await client.connect();
await client.setNickname("张三");
// 监听消息
client.on("message", (data) => {
console.log(`[${data.senderNickname}]: ${data.content}`);
});
// 创建群组并发送消息
const room = await client.createRoom("技术交流群");
await client.sendMessage(room.roomId, "Hello, World!");import { ChatClient } from "@agent-chatroom/client-web";
const client = new ChatClient({
url: "ws://localhost:3000/ws",
});
await client.connect();
await client.setNickname("李四");
client.on("message", (data) => {
displayMessage(data);
});
const room = await client.createRoom("前端交流群");
await client.sendMessage(room.roomId, "大家好!");详细使用说明请查看 客户端 SDK 文档。
- 运行环境: Node.js 18+
- 语言: TypeScript
- 包管理: pnpm (monorepo)
- WebSocket: ws
- HTTP 框架: Express
- 构建工具: TypeScript Compiler
// 创建群组
{
"type": "createRoom",
"requestId": "req_001",
"data": { "name": "技术交流群" }
}
// 发送消息
{
"type": "sendMessage",
"requestId": "req_002",
"data": {
"roomId": "room_xxx",
"content": "Hello!"
}
}# 获取群组信息
GET http://localhost:3000/api/rooms/:roomId
# 获取消息历史
GET http://localhost:3000/api/rooms/:roomId/messages?limit=50
# 系统概览(控制台)
GET http://localhost:3000/api/console/overviewpnpm buildpnpm cleanpackages/server: 服务器核心代码core/: 业务逻辑(UserManager、RoomManager、MessageManager)ws/: WebSocket 服务http/: HTTP 接口storage/: 存储抽象层
packages/shared: 共享类型定义和工具函数packages/client-web: 浏览器端 SDKpackages/client-node: Node.js SDKexamples/: 使用示例代码
系统设计考虑了未来扩展:
- 存储层: 抽象接口设计,可轻松切换到 Redis/数据库
- 水平扩展: 预留 Redis Pub/Sub 支持
- 消息类型: 可扩展支持图片、文件等
- 权限系统: 可细化权限控制
MIT