Salta ai contenuti

Server Multiplayer

Il relay multiplayer di En Parlant~ è un server WebSocket leggero scritto in Rust utilizzando Axum e socketioxide. Connette due giocatori per partite di scacchi in tempo reale tramite Socket.IO, senza archiviazione persistente e con requisiti minimi di risorse.

Il codice sorgente del server relay si trova nel repository en-parlant-relay.

Il server relay predefinito funziona immediatamente, ma ci sono buone ragioni per eseguirne uno proprio:

  • Privacy — tutto il traffico di gioco rimane sulla propria infrastruttura
  • Latenza inferiore — deploy più vicino ai giocatori per una trasmissione delle mosse più rapida
  • Indipendenza — nessuna dipendenza dalla disponibilità o dall’operatività del relay predefinito

Il repository del relay include un file di configurazione fly.toml, rendendo Fly.io il percorso di deployment più semplice. Il piano gratuito di Fly.io è adatto all’uso personale.

  1. Installare la CLI di Fly:

    Terminal window
    curl -L https://fly.io/install.sh | sh
  2. Registrarsi o effettuare l’accesso:

    Terminal window
    fly auth signup
    # or
    fly auth login
  3. Clonare il relay ed eseguire il deploy:

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

Fly.io compilerà il binario Rust, lo distribuirà e fornirà un URL pubblico come your-app-name.fly.dev.

Compilare il relay dal sorgente ed eseguirlo su qualsiasi macchina con una toolchain Rust.

  1. Clonare e compilare:

    Terminal window
    git clone https://github.com/DarrellThomas/en-parlant-relay.git
    cd en-parlant-relay
    cargo build --release
  2. Avviare il server:

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

    Il server è in ascolto sulla porta 3210 per impostazione predefinita.

  3. Per l’uso in produzione, eseguire dietro un reverse proxy (nginx, Caddy o simili) per gestire la terminazione TLS. Il relay comunica tramite WebSocket in chiaro — il proxy aggiunge il livello di crittografia wss://.

Il server è molto leggero. Mantiene le stanze di gioco in memoria, inoltra le mosse tra due giocatori e non fa nient’altro. Un piccolo VPS o persino un Raspberry Pi può gestirlo senza problemi.

Una volta che il relay è in esecuzione, configurare En Parlant~ per utilizzarlo:

  1. Aprire le Impostazioni in En Parlant~
  2. Trovare l’impostazione dell’URL del server relay multiplayer
  3. Inserire l’endpoint WebSocket del proprio server:
    • Per Fly.io: wss://your-app-name.fly.dev
    • Per self-hosted con proxy TLS: wss://relay.yourdomain.com
    • Per lo sviluppo locale: ws://localhost:3210

Tutto qui. L’applicazione utilizzerà il vostro relay per tutte le partite multiplayer.

Alcune informazioni sul funzionamento del relay:

  • Codici stanza — Il server genera codici di gioco a 6 caratteri utilizzando un set di caratteri non ambiguo. I caratteri che si assomigliano sono esclusi (nessun 0/O, nessun 1/I/L) per evitare confusione quando si condividono i codici a voce.

  • Pulizia delle stanze — Le stanze vengono automaticamente rimosse dopo 30 minuti di inattività. Un’attività di pulizia viene eseguita ogni 60 secondi per eliminare le stanze inattive.

  • Nessuna archiviazione persistente — Tutto lo stato risiede in memoria. Se il server si riavvia, le stanze attive vengono perse. Questo è intenzionale — il relay è stateless e facilmente sostituibile.

  • Risorse minime — Il server utilizza pochissima CPU e memoria. Si limita a ricevere eventi Socket.IO da un giocatore e a inoltrarli all’altro. Non c’è logica di gioco, nessuna validazione delle mosse, nessun database.