PlayDrop 的即時遊戲伺服器:Colyseus 與 MongoDB
為你的遊戲執行附帶 MongoDB 資料庫的託管 Colyseus 0.17 伺服器,用 SDK 從瀏覽器連線,用兩位玩家測試,並了解各項限制。
PlayDrop 可以託管遊戲的伺服器端:一個標準 Colyseus 伺服器,附帶專屬的 MongoDB 資料庫與經過驗證的玩家,不需要自行維運任何基礎架構。可用於即時對戰、回合制遊戲、共享世界,以及任何不能讓玩家作弊的內容。伺服器是選用的;你的遊戲也可以呼叫你自行架設的伺服器。
撰寫伺服器
從一個 ES 模組匯出 rooms 對照表。PlayDrop 會啟動伺服器;請勿呼叫 listen() 或定義 onAuth,因為 PlayDrop 會在 onJoin 之前驗證每位玩家。
import { Room, defineRoom } from "colyseus";
import { MongoClient } from "mongodb";
class GameRoom extends Room {
maxClients = 8;
async onCreate() {
this.mongo = new MongoClient(process.env.PLAYDROP_MONGO_URL);
await this.mongo.connect();
this.onMessage("move", (client, move) => this.applyMove(client.auth.userId, move));
}
onJoin(client) {
// client.auth is the verified PlayDrop player: userId, username, appRole, isTestPlayer…
}
async onDispose() { await this.mongo?.close(); }
}
export const rooms = { game: defineRoom(GameRoom) };在房間生命週期內連線到 MongoDB,絕不要在模組範圍內連線:PLAYDROP_MONGO_URL 只在執行時存在。請為你的查詢建立索引。
宣告伺服器
將伺服器打包成一個檔案,並在目錄中指向它:
{ "server": { "entry": "server/index.mjs", "rooms": ["game"] } }請以套件上傳;簡易 HTML 方式無法攜帶伺服器。
託管執行環境的規則
- Colyseus 0.17(
colyseus0.17.10、@colyseus/schema4.0.30)、MongoDB 驅動程式 7.5,執行於 Node.js 24.22.1。 - 單一獨立完整的 ES 模組,最大 2 MiB。只能匯入
colyseus、@colyseus/core、@colyseus/schema、mongodb和@playdrop/server;其他程式碼請打包進去。 - 最多 2 種房間類型、每個房間 8 名玩家、每個房間 4 小時、每位玩家每秒 30 則訊息,以及每則訊息 512 KiB。
- 無法存取網際網路:只能連線到 MongoDB 與 PlayDrop 服務。
- 玩家必須登入。
- 每款遊戲一個資料庫,跨版本保留,並計入創作者的儲存空間。切勿將它的位址或憑證傳送到瀏覽器。
從瀏覽器連線
const sdk = await playdrop.init();
const room = await sdk.multiplayer.join("game");
room.onStateChange((state) => render(state));
room.send("move", { x: 1 });join 會處理 PlayDrop 的派對座位與登入;請參閱線上派對。若需要更底層的控制,sdk.multiplayer.getConnection() 會傳回 { endpoint, token, expiresAt },供 sdk.libs.colyseus.load() 提供的官方 Colyseus 用戶端使用。
伺服器 SDK
@playdrop/server 加入受信任的平台呼叫:好友與遊戲卡片(playdrop.social)、購買驗證(playdrop.shop)、由創作者付費的 AI 生成(playdrop.ai),以及房間語音(playdrop.multiplayer.forRoom)。這些呼叫只適用於已上傳的遊戲。請參閱伺服器 SDK 參考。
測試
開發期間,請在本機執行 Colyseus 0.17 與 MongoDB,並將本機用戶端連線到本機伺服器。若要測試託管伺服器,請上傳私人版本並開啟 https://www.playdrop.ai/create/games/<slug>/test?v=<version>&player=1,再於第二個視窗開啟改為 player=2 的同一連結。每個視窗都會以你名下不同的測試玩家身分遊玩。運作正常後,用 publish_game_version 發布已測試的版本。
為斷線做好設計:Colyseus 的重新連線會短暫保留座位,房間狀態應讓回來的玩家能繼續遊戲。