Serwery gier PlayDrop: Colyseus, MongoDB i SDK serwera
Opcjonalny hostowany tryb wieloosobowy: prześlij Colyseus server.js z MongoDB, testuj z graczami testowymi i użyj SDK serwera dla znajomych i AI.
Serwer gry jest opcjonalny. Twoja gra może wywoływać dowolny serwer, który sam prowadzisz. Jeśli wolisz, PlayDrop hostuje standardowy serwer Colyseus z bazą danych MongoDB dla twojej gry: prześlij go jako server.js obok index.html przez PlayDrop Connector albo poproś PlayDrop Cloud, by go zbudował. Pakiet @playdrop/server też jest opcjonalny.
Napisz standardowy serwer 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 to zweryfikowany gracz PlayDrop, na przykład client.auth.userId.
}
async onDispose() { await this.mongo?.close(); }
}
export const rooms = { game: defineRoom(GameRoom) };Wyeksportuj mapę rooms z server.js i wypisz nazwy jej pokoi w catalogue.json jako "server": { "rooms": ["game"] }. PlayDrop uruchamia serwer, więc nie startuj własnego. Przechowuj dane za pomocą standardowego sterownika MongoDB przez PLAYDROP_MONGO_URL, w cyklu życia pokoju.
Zasady hostowanego serwera
- Colyseus 0.17 (
colyseus0.17.10,@colyseus/schema4.0.30), sterownik MongoDB 7.5 i Node 22. - Jeden samodzielny moduł ES do 2 MiB. Może importować tylko
colyseus,@colyseus/core,@colyseus/schema,mongodbi@playdrop/server; resztę kodu 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 z serwera: osiągalne są tylko MongoDB i usługi PlayDrop.
- Gracze muszą być zalogowani. PlayDrop weryfikuje każdego gracza przy dołączaniu; nie implementuj
onAuth. - Jedna baza MongoDB na grę, zachowywana między wersjami i wliczana do twojego limitu miejsca. Nigdy nie wysyłaj jej danych uwierzytelniających do przeglądarki.
Połącz przeglądarkę i testuj
W przeglądarce sdk.multiplayer.getConnection() z SDK klienta zwraca adres serwera i token gracza; dołącz za pomocą klienta Colyseus (@colyseus/sdk 0.17). Podczas tworzenia uruchom lokalnie Colyseus 0.17 i MongoDB 8 i łącz się bezpośrednio z lokalnym serwerem. Aby przetestować hostowany serwer, prześlij wersję prywatną, a potem otwórz https://www.playdrop.ai/create/games/<slug>/test?v=<version>&player=1 i ten sam link z player=2 w drugim oknie: każde okno gra jako osobne konto testowe. Gdy wszystko działa, ustaw wersję jako publiczną na stronie gry.
Opcjonalne SDK serwera: znajomi i AI
@playdrop/server dodaje playdrop.social (znajomi grający w tę grę i karty gier w czacie PlayDrop) oraz playdrop.ai (generowanie tekstu, obrazów, 3D, wideo, dźwięku, mowy i muzyki opłacane przez twórcę). Te wywołania działają tylko w przesłanych grach, nie w lokalnym środowisku deweloperskim. Pobieraj prywatne wygenerowane multimedia na serwerze przez playdrop.ai.tasks.downloadFile i wysyłaj bajty tylko zamierzonemu graczowi; prośby o mowę przyjmują najwyżej 40 słów.
Głos grupy i pokoju
await playdrop.social.getParty(client.auth) odczytuje aktualnie autoryzowane członkostwo w grupie. Nie ujawnia czatu grupy ani aktywności w innych grach i nie daje zarządzania grupą. Istniejące API społecznościowe zachowują swoje działanie.
Katalog deklarujący roomVoice: true zaczyna z polityką dla całego pokoju; do tej domyślnej nie jest potrzebne żadne wywołanie serwera. Aby ją dostosować, powiąż const platform = playdrop.multiplayer.forRoom(this) z rzeczywistym pokojem Colyseus. Użyj platform.voice.setPolicy("all" | "team" | "proximity" | "off", { range: 20 }), setTeam(client.auth, teamId), setAudience(client.auth, audience) i updatePositions([{ player: client.auth, position: { x, y, z } }]). Przekaż null, aby wyczyścić nadpisanie drużyny lub gracza. Bliskość wymaga świeżych autorytatywnych pozycji.
Zaufane środowisko łączy zmiany kwalifikowalności, rezerwuje zaakceptowanych obserwujących grupy po zwykłym dołączeniu lidera i sprząta uprawnienia. Gry nigdy nie wysyłają dźwięku, danych uwierzytelniających dostawcy ani próśb o mikrofon. Zachowaj ten sam pokój między rundami. Użyj istniejących prywatnych graczy testowych z kwalifikującym się twórcą, aby przetestować integrację przed publikacją; sama publikacja nie włącza wdrożenia.