خوادم الألعاب الفورية على 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فقط؛ واجمع كل ما عدا ذلك داخلها. - حتى نوعين من الغرف، و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)، والإنشاء بالذكاء الاصطناعي على حساب المبدع (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 بالمقعد لوقت قصير، ويجب أن تتيح حالة الغرفة للاعب العائد أن يتابع.