เซิร์ฟเวอร์เกมเรียลไทม์บน PlayDrop: Colyseus และ MongoDB
รันเซิร์ฟเวอร์ Colyseus 0.17 ที่โฮสต์ให้พร้อมฐานข้อมูล MongoDB สำหรับเกมของคุณ เชื่อมต่อจากเบราว์เซอร์ด้วย SDK ทดสอบด้วยผู้เล่นสองคน และรู้ขีดจำกัด
PlayDrop โฮสต์ฝั่งเซิร์ฟเวอร์ของเกมคุณได้: เซิร์ฟเวอร์ Colyseus มาตรฐานพร้อมฐานข้อมูล MongoDB ของตัวเอง ผู้เล่นที่ยืนยันตัวตนแล้ว และไม่ต้องดูแลโครงสร้างพื้นฐานเอง ใช้สำหรับแมตช์แบบเรียลไทม์ เกมผลัดตา โลกที่ใช้ร่วมกัน และทุกอย่างที่ผู้เล่นต้องโกงไม่ได้ เซิร์ฟเวอร์ไม่บังคับ เกมของคุณเรียกเซิร์ฟเวอร์ที่คุณโฮสต์เองก็ได้
เขียนเซิร์ฟเวอร์
ส่งออกแมป rooms จากโมดูล ES หนึ่งโมดูล 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 } สำหรับไคลเอนต์ Colyseus อย่างเป็นทางการจาก sdk.libs.colyseus.load()
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 จะกันที่นั่งไว้ช่วงสั้นๆ และสถานะของห้องควรให้ผู้เล่นที่กลับมาเล่นต่อได้