Pular para o conteúdo

Servidor Multijogador

O retransmissor multijogador do En Parlant~ é um servidor WebSocket leve, escrito em Rust utilizando Axum e socketioxide. Liga dois jogadores para partidas de xadrez em tempo real através de Socket.IO, sem armazenamento persistente e com requisitos mínimos de recursos.

O código-fonte do servidor de retransmissão encontra-se no repositório en-parlant-relay.

O servidor de retransmissão predefinido funciona de imediato, mas existem boas razões para executar o seu próprio:

  • Privacidade — todo o tráfego de jogo permanece na sua infraestrutura
  • Menor latência — implante mais perto dos seus jogadores para uma transmissão de jogadas mais rápida
  • Independência — sem dependência da disponibilidade ou funcionamento do servidor de retransmissão predefinido

O repositório do retransmissor inclui um ficheiro de configuração fly.toml, o que torna o Fly.io o caminho de implantação mais fácil. O plano gratuito do Fly.io é adequado para uso pessoal.

  1. Instale a CLI do Fly:

    Terminal window
    curl -L https://fly.io/install.sh | sh
  2. Registe-se ou inicie sessão:

    Terminal window
    fly auth signup
    # or
    fly auth login
  3. Clone o retransmissor e implante:

    Terminal window
    git clone https://github.com/DarrellThomas/en-parlant-relay.git
    cd en-parlant-relay
    fly launch
    fly deploy

O Fly.io compilará o binário Rust, implantá-lo-á e fornecer-lhe-á um URL público como your-app-name.fly.dev.

Compile o retransmissor a partir do código-fonte e execute-o em qualquer máquina com uma toolchain Rust.

  1. Clone e compile:

    Terminal window
    git clone https://github.com/DarrellThomas/en-parlant-relay.git
    cd en-parlant-relay
    cargo build --release
  2. Execute o servidor:

    Terminal window
    ./target/release/en-parlant-relay

    O servidor escuta na porta 3210 por predefinição.

  3. Para uso em produção, execute-o atrás de um proxy reverso (nginx, Caddy ou similar) para gerir a terminação TLS. O retransmissor em si comunica em WebSocket simples — o seu proxy adiciona a camada de encriptação wss://.

O servidor é muito leve. Mantém as salas de jogo em memória, reencaminha jogadas entre dois jogadores e não faz mais nada. Um VPS pequeno ou até um Raspberry Pi consegue geri-lo confortavelmente.

Quando o seu retransmissor estiver em execução, aponte o En Parlant~ para ele:

  1. Abra as Definições no En Parlant~
  2. Encontre a definição do URL do servidor de retransmissão multijogador
  3. Introduza o endpoint WebSocket do seu servidor:
    • Para Fly.io: wss://your-app-name.fly.dev
    • Para auto-alojado com proxy TLS: wss://relay.yourdomain.com
    • Para desenvolvimento local: ws://localhost:3210

É tudo. A aplicação utilizará o seu retransmissor para todos os jogos multijogador.

Alguns aspetos a saber sobre o funcionamento do retransmissor:

  • Códigos de sala — O servidor gera códigos de jogo de 6 caracteres utilizando um conjunto de caracteres não ambíguo. Caracteres visualmente semelhantes são excluídos (sem 0/O, sem 1/I/L) para evitar confusão ao partilhar códigos verbalmente.

  • Limpeza de salas — As salas são automaticamente removidas após 30 minutos de inatividade. Uma tarefa de limpeza é executada a cada 60 segundos para eliminar salas inativas.

  • Sem armazenamento persistente — Todo o estado reside em memória. Se o servidor reiniciar, as salas ativas são perdidas. Isto é intencional — o retransmissor é sem estado e trivialmente substituível.

  • Recursos mínimos — O servidor utiliza muito pouco CPU e memória. Apenas recebe eventos Socket.IO de um jogador e reencaminha-os para o outro. Não há lógica de jogo, nem validação de jogadas, nem base de dados.