Serwery gier czasu rzeczywistego w PlayDrop: Colyseus i MongoDB
Uruchom hostowany serwer Colyseus 0.17 z bazą MongoDB dla swojej gry, łącz się z przeglądarki przez SDK, testuj z dwoma graczami i poznaj limity.
PlayDrop może hostować serwerową część twojej gry: standardowy serwer Colyseus z własną bazą danych MongoDB, zweryfikowanymi graczami i bez infrastruktury do utrzymywania. Używaj go do meczów w czasie rzeczywistym, gier turowych, wspólnych światów i wszystkiego, w czym gracz nie powinien móc oszukiwać. Serwer jest opcjonalny; twoja gra może też wywoływać serwer, który hostujesz sam.
Napisz serwer
Wyeksportuj mapę rooms z jednego modułu ES. PlayDrop sam uruchamia serwer; nie wywołuj listen() ani nie definiuj onAuth, ponieważ PlayDrop weryfikuje każdego gracza przed 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) };Łącz się z MongoDB w cyklu życia pokoju, nigdy na poziomie modułu: PLAYDROP_MONGO_URL istnieje tylko w czasie działania. Utwórz indeksy dla swoich zapytań.
Zadeklaruj go
Spakuj serwer do jednego pliku i wskaż go w katalogu:
{ "server": { "entry": "server/index.mjs", "rooms": ["game"] } }Prześlij go w pakiecie; gra przesłana jako prosty plik HTML nie może mieć serwera.
Zasady hostowanego środowiska
- Colyseus 0.17 (
colyseus0.17.10,@colyseus/schema4.0.30), sterownik MongoDB 7.5, na Node.js 24.22.1. - Jeden samodzielny moduł ES o rozmiarze najwyżej 2 MiB. Może importować tylko
colyseus,@colyseus/core,@colyseus/schema,mongodbi@playdrop/server; resztę spakuj do pliku. - Do 2 typów pokoi, 8 graczy w pokoju, 4 godziny na pokój, 30 wiadomości na sekundę na gracza i 512 KiB na wiadomość.
- Brak dostępu do internetu: osiągalne są tylko MongoDB i usługi PlayDrop.
- Gracze muszą być zalogowani.
- Jedna baza danych na grę, zachowywana między wersjami i wliczana do miejsca twórcy. Nigdy nie wysyłaj jej adresu ani danych uwierzytelniających do przeglądarki.
Połącz się z przeglądarki
const sdk = await playdrop.init();
const room = await sdk.multiplayer.join("game");
room.onStateChange((state) => render(state));
room.send("move", { x: 1 });join obsługuje miejsca w grupach PlayDrop i logowanie; zobacz grupy online. Jeśli potrzebujesz kontroli na niższym poziomie, sdk.multiplayer.getConnection() zwraca { endpoint, token, expiresAt } dla oficjalnego klienta Colyseus z sdk.libs.colyseus.load().
SDK serwera
@playdrop/server dodaje zaufane wywołania platformy: znajomych i karty gier (playdrop.social), weryfikację zakupów (playdrop.shop), generowanie z AI opłacane przez twórcę (playdrop.ai) i głos pokoju (playdrop.multiplayer.forRoom). Działają tylko w przesłanych grach. Zobacz dokumentację SDK serwera.
Testuj
Podczas tworzenia uruchom lokalnie Colyseus 0.17 i MongoDB i połącz lokalnego klienta z lokalnym serwerem. Aby przetestować hostowany serwer, prześlij wersję prywatną i otwórz https://www.playdrop.ai/create/games/<slug>/test?v=<version>&player=1, a potem ten sam link z player=2 w drugim oknie. Każde okno gra jako osobny twój gracz testowy. Gdy wszystko działa, opublikuj przetestowaną wersję przez publish_game_version.
Projektuj z myślą o rozłączeniach: mechanizm ponownego łączenia Colyseus zachowuje miejsce gracza przez krótki czas, a stan pokoju powinien pozwolić powracającemu graczowi grać dalej.