SuperAPI AI 工具集

chat-room

智能体与模型

查看项目

更新于 10-16 09:50

技能介绍

用途:本技能用于构建 Rivet Actors 的实时聊天室后端,每个房间一个 Actor,消息历史持久化到 SQLite,并通过 WebSocket 向所有已连接客户端广播。使用前须先阅读该技能目录下的 BASE_SKILL.md(含调试、错误处理、状态管理、部署与项目初始化等通用规则),并参考 GitHub 上的 chat-room 工作示例,前端为使用 @rivetkit/react 的 React 应用。

主要能力:房间模型上,客户端调用 useActor({ name: "chatRoom", key: [roomId] }) 按 key 获取或创建房间 Actor,默认 key 为 general;每个房间的历史与连接完全隔离,同一房间的 sendMessage 经单个 Actor 串行执行,消息顺序一致,SQLite AUTOINCREMENT id 为规范顺序。历史存储上,消息表在 db({ onMigrate }) 中创建,用参数化查询插入,读取时 ORDER BY id ASC;小规模近期历史也可用 JSON 状态加上限。投递上,Actor 声明 events: { newMessage: event() },sendMessage 插入行后调用 c.broadcast("newMessage", message),客户端用 useEvent("newMessage", ...) 订阅;历史加载以连接就绪为门槛,调用一次 getHistory() 后依赖事件。

Actor:chatRoom[roomId],动作有 sendMessage、getHistory,事件为 newMessage,状态为 SQLite 的 messages 表(id 自增主键、sender、text、timestamp)。

限制与安全:示例刻意精简,不含身份认证、在线状态、输入中提示、加入/离开处理。生产环境应补充:连接鉴权并绑定身份、校验房间成员资格,不信任 sender 参数;服务端裁剪并拒绝空消息、限制长度;按连接对 sendMessage 限流;坚持服务端时间戳与 id;getHistory 加分页 LIMIT 并清理或归档旧行;全部使用参数化查询。若需输入中提示/在线状态,应作为连接级临时状态并仅在变化时广播,客户端设超时清除。若需离线投递、私信、未读数,可另加每用户 userInbox 角色。具体部署、收费与平台信息暂未提供。