Dreamin 联机 SDK

给静态网页游戏接入多人联机 —— 进房、状态同步、自定义消息、聊天、房间共享数据,无需自建后端。

SDK: ai.dreamin.cn/sdk/v1/dreamin.js 服务端: wss://ws.dreamin.cn

给 AI 用 🤖

开发前先让 agent 读 llms.txt(索引)与 llms-full.txt(完整参考与红线)。把下面这段引导词复制给你的 agent 即可:

我要做一个网页多人游戏,部署为纯静态页面。联机功能使用 Dreamin 联机 SDK:
先完整阅读 https://ai.dreamin.cn/dev/llms.txt 和 https://ai.dreamin.cn/dev/llms-full.txt ,
严格遵守其中的频率/大小/房间人数红线,然后帮我实现游戏。

30 秒上手

SDK 会自动加载 socket.io-client,一个 script 标签即可:

<script src="https://ai.dreamin.cn/sdk/v1/dreamin.js"></script>
<script>
  // 1. 初始化(work 是你的作品 slug,小写字母/数字/连字符)
  const dreamin = await Dreamin.init({ work: 'my-game', nickname: '玩家1' });

  // 2. 进房(房间自动创建,先进房者是房主)
  const room = await dreamin.room.join('lobby');

  // 3. 状态同步(高频通道,≤30Hz,适合位置/动画)
  room.onState((state, fromId) => updateRemotePlayer(fromId, state));
  setInterval(() => room.sendState({ pos: [x, y, z], rot }), 66); // ~15Hz

  // 4. 自定义消息(低频通道,≤10Hz,适合动作事件)
  room.onMessage((data, fromId) => console.log(data));
  room.send({ type: 'shoot' });            // 广播
  room.sendTo(someId, { type: 'trade' });  // 定点

  // 5. 聊天
  room.onChat(({ nickname, text }) => addChatLine(nickname, text));
  room.chat('大家好');

  // 6. 房间共享数据(仅房主可写,适合比分/回合)
  room.data.set('score', { a: 3, b: 1 });
  room.onData((key, value) => renderScore(value));
</script>

架构模型

API 速查

API说明
await Dreamin.init({work, nickname?})连接服务端,返回 {user, room, socket}
await dreamin.room.join(name)进房,失败 reject(room-full 等)
room.peers() / isHost() / hostId()在场成员快照 / 房主判断
room.onPeer(({type,id,nickname}))成员进出('join' | 'leave')
room.onHost((id))房主变更
room.sendState(state) / onState(fn)高频状态通道(≤30Hz,≤4KB)
room.send(data) / sendTo(id,data) / onMessage(fn)低频消息通道(≤10Hz,≤4KB)
room.chat(text) / onChat(fn)聊天(200 字,2Hz)
room.data.set/get / onData(fn)房间共享数据(仅房主可写)
room.onError(fn)业务错误(room-full / not-host / rate-limited / too-large)
room.leave()离开当前房间

红线

限制超限后果
单房间人数20join 被拒(room-full)
sendState 频率 / 大小30Hz / 4KB静默丢弃 / too-large
send 频率 / 大小10Hz / 4KBrate-limited / too-large
聊天200 字 / 2Hz截断 / 丢弃
work、room 命名a-z 0-9 -,≤63 字符bad-work / bad-room
共享数据仅房主写,key ≤64 字符,value ≤4KBnot-host / too-large

共享数据随空房销毁,不是持久存档;传输内容对房间内所有人可见,不要放敏感信息。需要更多人同场就自己分房间(room-1、room-2……)。

常见玩法配方

本地开发

页面用任意静态服务器运行(如 python -m http.server),SDK 默认连线上 wss://ws.dreamin.cn。开两个浏览器标签页就是两个玩家。

发布作品(上传 API)

两条路径任选:

如果你的 Agent 环境无法打包或发 HTTP POST:让它把完整单页 HTML 源码交给你,你自己到上传页的「单页 HTML 粘贴」通道提交即可。Agent 也可走 API 的 html 字段直接提交源码。

cd 作品目录 && zip -r work.zip .
curl -X POST https://ws.dreamin.cn/upload/ \
  -F "file=@work.zip" \
  -F "slug=my-game" \
  -F "title=我的游戏" \
  -F "author=用户名" \
  -F "desc=一句话介绍" \
  -F "online=1"   # 用了 Dreamin 联机 SDK 才带,卡片显示「联机」徽章
# 返回 {"ok":true,"url":"https://ai.dreamin.cn/works/my-game/","updateToken":"...", ...}

# 修改后更新:同一 slug + 同一 updateToken(服务端覆盖并自动清理旧文件)
curl -X POST https://ws.dreamin.cn/upload/ \
  -F "file=@work.zip" -F "slug=my-game" \
  -F "title=我的游戏" -F "author=用户名" -F "token=<updateToken>"

记住 slug 与 updateToken:建议写入项目的 PUBLISH.md。 后续修改必须复用同一 slug 走同一路线;updateToken 是作品的唯一修改凭证,泄露意味着他人可覆盖你的作品。

限制
slug 规则小写字母/数字/连字符 ≤63 字符,全网唯一(更新需 updateToken,否则 403)
zip 大小≤50MB,≤500 个文件,单文件 ≤20MB,解压总量 ≤100MB
频率每个 IP 每天 ≤200 次
字段编码文本字段一律 UTF-8

发布即公开:zip 内不要放任何密钥或私密信息。

回流徽标(约定)

发布的作品请在 index.html 加一行,右下角会显示「Made with Dreamin」并链接回首页——你的每个玩家都可能因此成为下一个创作者:

<script src="https://ai.dreamin.cn/badge/dreamin-badge.js"></script>

可选配置:data-position="bottom-left"(换角)、data-theme="dark"(深色底)。