Servidores de jogo em tempo real no PlayDrop: Colyseus e MongoDB
Rode um servidor Colyseus 0.17 hospedado com um banco MongoDB para o seu jogo, conecte o navegador com o SDK, teste com dois jogadores e conheça os limites.
O PlayDrop pode hospedar o lado servidor do seu jogo: um servidor Colyseus padrão com seu próprio banco de dados MongoDB, jogadores verificados e nenhuma infraestrutura para manter. Use-o para partidas em tempo real, jogos por turnos, mundos compartilhados e tudo em que um jogador não deve conseguir trapacear. Um servidor é opcional; seu jogo também pode chamar um servidor que você mesmo hospeda.
Escreva o servidor
Exporte um mapa rooms de um único módulo ES. O PlayDrop inicia o servidor; não chame listen() nem defina onAuth, porque o PlayDrop verifica cada jogador antes de 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) };Conecte-se ao MongoDB dentro do ciclo de vida da sala, nunca no escopo do módulo: PLAYDROP_MONGO_URL só existe durante a execução. Crie índices para as suas consultas.
Declare o servidor
Empacote o servidor em um único arquivo e aponte o catálogo para ele:
{ "server": { "entry": "server/index.mjs", "rooms": ["game"] } }Envie-o em um pacote; o caminho de HTML simples não comporta um servidor.
Regras do ambiente hospedado
- Colyseus 0.17 (
colyseus0.17.10,@colyseus/schema4.0.30), driver do MongoDB 7.5, no Node.js 24.22.1. - Um único módulo ES autocontido de no máximo 2 MiB. Ele só pode importar
colyseus,@colyseus/core,@colyseus/schema,mongodbe@playdrop/server; empacote todo o resto. - Até 2 tipos de sala, 8 jogadores por sala, 4 horas por sala, 30 mensagens por segundo por jogador e 512 KiB por mensagem.
- Sem acesso à internet: só o MongoDB e os serviços do PlayDrop são acessíveis.
- Os jogadores precisam estar logados.
- Um banco de dados por jogo, mantido entre as versões e contabilizado no armazenamento do criador. Nunca envie o endereço nem as credenciais dele a um navegador.
Conecte o navegador
const sdk = await playdrop.init();
const room = await sdk.multiplayer.join("game");
room.onStateChange((state) => render(state));
room.send("move", { x: 1 });join cuida das vagas de grupo e do login do PlayDrop; veja grupos online. Para um controle de nível mais baixo, sdk.multiplayer.getConnection() retorna { endpoint, token, expiresAt } para o cliente oficial do Colyseus, obtido com sdk.libs.colyseus.load().
SDK de servidor
@playdrop/server adiciona chamadas confiáveis à plataforma: amigos e cards de jogo (playdrop.social), verificação de compras (playdrop.shop), geração com IA paga pelo criador (playdrop.ai) e voz da sala (playdrop.multiplayer.forRoom). Elas só funcionam em jogos enviados. Veja a referência do SDK de servidor.
Teste
Durante o desenvolvimento, rode o Colyseus 0.17 e o MongoDB localmente e conecte seu cliente local ao seu servidor local. Para testar o servidor hospedado, envie uma versão privada e abra https://www.playdrop.ai/create/games/<slug>/test?v=<version>&player=1 e depois o mesmo link com player=2 em uma segunda janela. Cada janela joga como um jogador de teste diferente seu. Quando tudo funcionar, publique a versão testada com publish_game_version.
Pense nas desconexões: a reconexão do Colyseus guarda a vaga por pouco tempo, e o estado da sala deve permitir que um jogador que volta continue de onde parou.