Ir al contenido

Servidor Multijugador

El servidor de retransmisión multijugador de En Parlant~ es un servidor WebSocket ligero escrito en Rust utilizando Axum y socketioxide. Conecta a dos jugadores para partidas de ajedrez en tiempo real a través de Socket.IO, sin almacenamiento persistente y con requisitos mínimos de recursos.

El código fuente del servidor de retransmisión se encuentra en el repositorio en-parlant-relay.

El servidor de retransmisión predeterminado funciona de forma inmediata, pero existen buenas razones para ejecutar el tuyo propio:

  • Privacidad — todo el tráfico de las partidas permanece en tu infraestructura
  • Menor latencia — despliega más cerca de tus jugadores para una transmisión de movimientos más rápida
  • Independencia — sin dependencia del tiempo de actividad o disponibilidad del servidor de retransmisión predeterminado

El repositorio del servidor de retransmisión incluye un archivo de configuración fly.toml, lo que convierte a Fly.io en la opción de despliegue más sencilla. El nivel gratuito de Fly.io es adecuado para uso personal.

  1. Instala la CLI de Fly:

    Ventana de terminal
    curl -L https://fly.io/install.sh | sh
  2. Regístrate o inicia sesión:

    Ventana de terminal
    fly auth signup
    # or
    fly auth login
  3. Clona el repositorio del servidor de retransmisión y despliega:

    Ventana de terminal
    git clone https://github.com/DarrellThomas/en-parlant-relay.git
    cd en-parlant-relay
    fly launch
    fly deploy

Fly.io compilará el binario de Rust, lo desplegará y te proporcionará una URL pública como your-app-name.fly.dev.

Compila el servidor de retransmisión desde el código fuente y ejecútalo en cualquier máquina con una cadena de herramientas de Rust.

  1. Clona y compila:

    Ventana de terminal
    git clone https://github.com/DarrellThomas/en-parlant-relay.git
    cd en-parlant-relay
    cargo build --release
  2. Ejecuta el servidor:

    Ventana de terminal
    ./target/release/en-parlant-relay

    El servidor escucha en el puerto 3210 por defecto.

  3. Para uso en producción, ejecútalo detrás de un proxy inverso (nginx, Caddy u otro similar) para gestionar la terminación TLS. El servidor de retransmisión utiliza WebSocket sin cifrar — tu proxy añade la capa de cifrado wss://.

El servidor es muy ligero. Mantiene las salas de juego en memoria, reenvía movimientos entre dos jugadores y no hace nada más. Un VPS pequeño o incluso una Raspberry Pi pueden manejarlo sin problemas.

Una vez que tu servidor de retransmisión esté en funcionamiento, apunta En Parlant~ hacia él:

  1. Abre Configuración en En Parlant~
  2. Busca la opción de URL del servidor de retransmisión multijugador
  3. Introduce el endpoint WebSocket de tu servidor:
    • Para Fly.io: wss://your-app-name.fly.dev
    • Para autoalojado con proxy TLS: wss://relay.yourdomain.com
    • Para desarrollo local: ws://localhost:3210

Eso es todo. La aplicación utilizará tu servidor de retransmisión para todas las partidas multijugador.

Algunos aspectos a tener en cuenta sobre el funcionamiento del servidor de retransmisión:

  • Códigos de sala — El servidor genera códigos de partida de 6 caracteres utilizando un conjunto de caracteres no ambiguos. Se excluyen los caracteres que se parecen entre sí (sin 0/O, sin 1/I/L) para evitar confusiones al compartir los códigos verbalmente.

  • Limpieza de salas — Las salas se eliminan automáticamente tras 30 minutos de inactividad. Una tarea de limpieza se ejecuta cada 60 segundos para eliminar las salas inactivas.

  • Sin almacenamiento persistente — Todo el estado se mantiene en memoria. Si el servidor se reinicia, las salas activas se pierden. Esto es intencional — el servidor de retransmisión es sin estado y trivialmente reemplazable.

  • Recursos mínimos — El servidor utiliza muy poca CPU y memoria. Solo recibe eventos de Socket.IO de un jugador y los reenvía al otro. No hay lógica de juego, no hay validación de movimientos, no hay base de datos.