Um servidor de testes de verdade
O MushRog ganhou um servidor de testes na internet. O botão “Jogar online” do menu agora conecta direto nele, sem ninguém precisar hospedar no próprio computador.
Por quê
Até aqui, jogar junto pedia que alguém abrisse o jogo como host e passasse o IP. Servia para testar entre dois computadores, mas não para chamar gente. Antes de alugar a máquina medimos quanto cada jogador custa em rede, e a conta não fechava.
Como funciona
Dentro de uma sala, o servidor mandava o estado inteiro da luta 20 vezes por segundo: de 7 a 16 KB por envio, uns 250 KB/s por jogador. Com 50 pessoas em salas, seriam 100 Mbit/s.
Separamos o que quase nunca muda (nomes, aparência, atributos, o mapa da sala) do que muda a cada instante (posições, vida, recargas, ataques). A primeira parte só viaja quando muda. A segunda vai num formato binário enxuto, de uns 25 bytes por monstro. Medimos com quatro jogadores usando skills sem parar: de 250 para 15 KB/s por jogador na Incursão, de 200 para 11 na dungeon, e ainda passa por compressão. Ficou de 17 a 27 vezes menor.
O servidor roda numa VPS em modo dedicado, sem gráficos, como um serviço que reinicia sozinho se cair. A máquina aceita só SSH por chave e a porta do jogo, bloqueia quem erra a senha várias vezes, se atualiza sozinha de madrugada e faz backup das contas todo dia. Ainda não temos domínio, então o cliente aponta para o IP. Como é um servidor de testes, pode ser apagado para recomeçar do zero.
Próximo passo
Chamar os primeiros amigos para jogar ao mesmo tempo e ver o que quebra.
Mudanças
- 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.