Zum Inhalt springen

Multiplayer-Server

Das En Parlant~-Multiplayer-Relay ist ein leichtgewichtiger WebSocket-Server, geschrieben in Rust mit Axum und socketioxide. Er verbindet zwei Spieler für Echtzeit-Schach über Socket.IO – ohne persistente Datenspeicherung und mit minimalen Ressourcenanforderungen.

Der Quellcode des Relay-Servers befindet sich im Repository en-parlant-relay.

Der Standard-Relay-Server funktioniert sofort ohne weitere Konfiguration, aber es gibt gute Gründe, einen eigenen zu betreiben:

  • Datenschutz – der gesamte Spielverkehr bleibt auf Ihrer eigenen Infrastruktur
  • Geringere Latenz – deployen Sie näher an Ihren Spielern für schnellere Zugübertragung
  • Unabhängigkeit – keine Abhängigkeit von der Verfügbarkeit oder Erreichbarkeit des Standard-Relays

Das Relay-Repository enthält eine fly.toml-Konfigurationsdatei, was Fly.io zum einfachsten Deployment-Weg macht. Der kostenlose Tarif von Fly.io ist für den persönlichen Gebrauch ausreichend.

  1. Installieren Sie die Fly CLI:

    Terminal-Fenster
    curl -L https://fly.io/install.sh | sh
  2. Registrieren Sie sich oder melden Sie sich an:

    Terminal-Fenster
    fly auth signup
    # or
    fly auth login
  3. Klonen Sie das Relay und deployen Sie es:

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

Fly.io kompiliert die Rust-Binary, deployt sie und stellt Ihnen eine öffentliche URL wie your-app-name.fly.dev bereit.

Kompilieren Sie das Relay aus dem Quellcode und führen Sie es auf einer beliebigen Maschine mit einer Rust-Toolchain aus.

  1. Klonen und kompilieren:

    Terminal-Fenster
    git clone https://github.com/DarrellThomas/en-parlant-relay.git
    cd en-parlant-relay
    cargo build --release
  2. Starten Sie den Server:

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

    Der Server lauscht standardmäßig auf Port 3210.

  3. Für den Produktionseinsatz sollten Sie den Server hinter einem Reverse Proxy (nginx, Caddy oder ähnlich) betreiben, um die TLS-Terminierung zu übernehmen. Das Relay selbst spricht reines WebSocket – Ihr Proxy fügt die wss://-Verschlüsselungsschicht hinzu.

Der Server ist sehr leichtgewichtig. Er hält Spielräume im Arbeitsspeicher, leitet Züge zwischen zwei Spielern weiter und tut sonst nichts. Ein kleiner VPS oder sogar ein Raspberry Pi kann ihn problemlos betreiben.

Sobald Ihr Relay läuft, verweisen Sie En Parlant~ darauf:

  1. Öffnen Sie Einstellungen in En Parlant~
  2. Suchen Sie die Einstellung für die Multiplayer-Relay-Server-URL
  3. Geben Sie den WebSocket-Endpunkt Ihres Servers ein:
    • Für Fly.io: wss://your-app-name.fly.dev
    • Für selbst gehostet mit TLS-Proxy: wss://relay.yourdomain.com
    • Für lokale Entwicklung: ws://localhost:3210

Das war’s. Die App verwendet Ihr Relay für alle Mehrspieler-Partien.

Einige Hinweise zur Funktionsweise des Relays:

  • Raumcodes – Der Server generiert 6-stellige Spielcodes unter Verwendung eines eindeutigen Zeichensatzes. Zeichen, die sich ähnlich sehen, sind ausgeschlossen (kein 0/O, kein 1/I/L), um Verwechslungen beim mündlichen Weitergeben von Codes zu vermeiden.

  • Raumbereinigung – Räume werden nach 30 Minuten Inaktivität automatisch entfernt. Eine Bereinigungsaufgabe läuft alle 60 Sekunden, um inaktive Räume zu entfernen.

  • Keine persistente Datenspeicherung – Der gesamte Zustand befindet sich im Arbeitsspeicher. Wenn der Server neu startet, gehen aktive Räume verloren. Dies ist beabsichtigt – das Relay ist zustandslos und trivial austauschbar.

  • Minimale Ressourcen – Der Server benötigt sehr wenig CPU und Arbeitsspeicher. Er empfängt lediglich Socket.IO-Events von einem Spieler und leitet sie an den anderen weiter. Es gibt keine Spiellogik, keine Zugvalidierung, keine Datenbank.