Un servidor de pruebas de verdad
MushRog ya tiene un servidor de pruebas en internet. El botón “Jugar en línea” del menú ahora conecta directo ahí, sin que nadie tenga que hospedar en su propia computadora.
Por qué
Hasta aquí, jugar juntos pedía que alguien abriera el juego como host y pasara su IP. Servía para probar entre dos computadoras, pero no para invitar gente. Antes de rentar la máquina medimos cuánto cuesta cada jugador en red, y la cuenta no salía.
Cómo funciona
Dentro de una sala, el servidor mandaba el estado completo de la pelea 20 veces por segundo: de 7 a 16 KB por envío, unos 250 KB/s por jugador. Con 50 personas en salas, serían 100 Mbit/s.
Separamos lo que casi nunca cambia (nombres, apariencia, atributos, el mapa de la sala) de lo que cambia a cada instante (posiciones, vida, recargas, ataques). La primera parte solo viaja cuando cambia. La segunda va en un formato binario compacto, de unos 25 bytes por monstruo. Medimos con cuatro jugadores usando skills sin parar: de 250 a 15 KB/s por jugador en la Incursión, de 200 a 11 en la dungeon, y todavía pasa por compresión. Quedó entre 17 y 27 veces más chico.
El servidor corre en una VPS en modo dedicado, sin gráficos, como un servicio que se reinicia solo si se cae. La máquina acepta solo SSH por llave y el puerto del juego, bloquea a quien falla la contraseña varias veces, se actualiza sola de madrugada y hace respaldo de las cuentas todos los días. Todavía no tenemos dominio, así que el cliente apunta a la IP. Como es un servidor de pruebas, se puede borrar para empezar de cero.
Próximo paso
Invitar a los primeros amigos a jugar al mismo tiempo y ver qué se rompe.
Cambios
- perf(net): room state split into fixed info and a binary tick
Rooms used to send the whole sim as a Dictionary 20 times a second (7 to 16 KB each). Now the fixed part (names, looks, stats, room meta, who exists and in what order) goes reliable only when it changes, and every tick sends a binary block in that order: positions in 1/32 px, timers in centiseconds, auras and phases as indexes. A tick that does not match the fixed version waits for the new one. Frozen time now reaches the client too. ENet range coder compression on both ends. Measured with 4 players spamming skills: explore 250 -> 15 KB/s per player, dungeon 203 -> 11, farm 314 -> 12, before compression. The explore pause is a fixed end time in meta so it does not resend the fixed part every tick. Protocol 13.
- feat(deploy): staging VPS with a dedicated Linux server
Linux Server export preset (dedicated server, main scene overridden to server/server.tscn). deploy/staging has the provisioning script (admin user with key-only SSH, service user without shell, ufw with SSH rate limit and the game port, fail2ban, unattended security upgrades with a 04:30 reboot, sysctl hardening, journald cap), the SSH lockdown, a sandboxed systemd unit and a daily backup timer. tools/deploy_staging.sh builds, uploads over one multiplexed SSH connection, swaps the current release link, restarts and keeps the last five releases. The client menu gets Jogar online pointing at the staging IP until there is a domain. Version 0.2.1.