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.
Por qué alojar tu propio servidor
Sección titulada «Por qué alojar tu propio servidor»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
Opciones de despliegue
Sección titulada «Opciones de despliegue»Fly.io (Recomendado)
Sección titulada «Fly.io (Recomendado)»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.
-
Instala la CLI de Fly:
Ventana de terminal curl -L https://fly.io/install.sh | sh -
Regístrate o inicia sesión:
Ventana de terminal fly auth signup# orfly auth login -
Clona el repositorio del servidor de retransmisión y despliega:
Ventana de terminal git clone https://github.com/DarrellThomas/en-parlant-relay.gitcd en-parlant-relayfly launchfly deploy
Fly.io compilará el binario de Rust, lo desplegará y te proporcionará una URL pública como your-app-name.fly.dev.
Autoalojado
Sección titulada «Autoalojado»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.
-
Clona y compila:
Ventana de terminal git clone https://github.com/DarrellThomas/en-parlant-relay.gitcd en-parlant-relaycargo build --release -
Ejecuta el servidor:
Ventana de terminal ./target/release/en-parlant-relayEl servidor escucha en el puerto 3210 por defecto.
-
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.
Configuración de En Parlant~
Sección titulada «Configuración de En Parlant~»Una vez que tu servidor de retransmisión esté en funcionamiento, apunta En Parlant~ hacia él:
- Abre Configuración en En Parlant~
- Busca la opción de URL del servidor de retransmisión multijugador
- 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
- Para Fly.io:
Eso es todo. La aplicación utilizará tu servidor de retransmisión para todas las partidas multijugador.
Detalles del servidor
Sección titulada «Detalles del servidor»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, sin1/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.