PlayDrop 游戏服务器:Colyseus、MongoDB 和服务器 SDK
PlayDrop 游戏的可选托管多人功能:上传使用 MongoDB 存储的 Colyseus server.js,用测试玩家进行测试,并可使用可选的服务器 SDK 实现好友和 AI 功能。
游戏服务器是可选的。你的游戏可以调用你自己运行的任何服务器。如果你愿意,PlayDrop 也可以为你的游戏托管一个带 MongoDB 数据库的标准 Colyseus 服务器:通过 PlayDrop Connector 将它作为 server.js 与 index.html 放在一起上传,或让 PlayDrop Cloud 为你构建。@playdrop/server 包同样是可选的。
编写标准 Colyseus 服务器
import { Room, defineRoom } from "colyseus";
import { MongoClient } from "mongodb";
class GameRoom extends Room {
async onCreate() {
this.mongo = new MongoClient(process.env.PLAYDROP_MONGO_URL);
await this.mongo.connect();
}
onJoin(client) {
// client.auth is the verified PlayDrop player, for example client.auth.userId.
}
async onDispose() { await this.mongo?.close(); }
}
export const rooms = { game: defineRoom(GameRoom) };从 server.js 导出 rooms 映射,并在 catalogue.json 中以 "server": { "rooms": ["game"] } 列出房间名称。服务器由 PlayDrop 运行,请不要自行启动。在房间生命周期内,通过 PLAYDROP_MONGO_URL 使用标准 MongoDB 驱动存储数据。
托管服务器规则
- Colyseus 0.17(
colyseus0.17.10、@colyseus/schema4.0.30)、MongoDB 驱动 7.5 和 Node 22。 - 一个自包含的 ES 模块,最大 2 MiB。只能导入
colyseus、@colyseus/core、@colyseus/schema、mongodb和@playdrop/server;其他代码请打包进该文件。 - 最多 2 种房间类型,每个房间 8 名玩家、每个房间 4 小时、每位玩家每秒 30 条消息、每条消息 512 KiB。
- 服务器无法访问互联网:只能访问 MongoDB 和 PlayDrop 服务。
- 玩家必须登录。PlayDrop 会在每位玩家加入时进行验证;不要实现
onAuth。 - 每个游戏一个 MongoDB 数据库,跨版本保留,并计入你的存储配额。切勿将其凭据发送到浏览器。
连接浏览器并测试
在浏览器中,客户端 SDK 的 sdk.multiplayer.getConnection() 会返回服务器地址和玩家的令牌;请使用 Colyseus 客户端(@colyseus/sdk 0.17)加入。开发期间,请在本地运行 Colyseus 0.17 和 MongoDB 8,并直接连接本地服务器。要测试托管服务器,请上传一个私人版本,然后打开 https://www.playdrop.ai/create/games/<slug>/test?v=<version>&player=1,并在第二个窗口中打开改为 player=2 的同一链接:每个窗口都会以不同的测试账户游玩。运行正常后,在游戏页面将该版本设为公开。
可选的服务器 SDK:好友和 AI
@playdrop/server 提供 playdrop.social(正在玩这个游戏的好友,以及 PlayDrop Chat 中的游戏卡片)和 playdrop.ai(由创作者付费的文本、图像、3D、视频、音效、语音和音乐生成)。这些调用仅适用于已上传的游戏,不适用于本地开发。请在服务器上使用 playdrop.ai.tasks.downloadFile 下载私有生成媒体,并仅将字节数据发送给目标玩家;语音请求最多接受 40 个单词。