MushRog

Настоящий тестовый сервер

14 октября 2026 г. arquiteturabastidores

Машинный перевод, ещё не проверен.

У MushRog появился тестовый сервер в интернете. Кнопка «Jogar online» в меню теперь подключается прямо к нему, и никому не нужно хостить игру на своём компьютере.

Зачем

До сих пор для совместной игры кому-то приходилось открывать игру как хост и передавать IP. Для теста между двумя компьютерами годилось, но звать людей было нельзя. Прежде чем арендовать машину, мы измерили, сколько каждый игрок стоит по сети, и расчёт не сходился.

Как это работает

Внутри комнаты сервер отправлял полное состояние боя 20 раз в секунду: от 7 до 16 KB за отправку, примерно 250 KB/s на игрока. При 50 людях в комнатах это было бы 100 Mbit/s.

Мы разделили то, что почти не меняется (имена, внешность, атрибуты, карта комнаты), и то, что меняется каждое мгновение (позиции, здоровье, перезарядки, атаки). Первая часть передаётся только при изменении. Вторая идёт в компактном бинарном формате, около 25 байт на монстра. Мы измерили с четырьмя игроками, без остановки использующими скиллы: с 250 до 15 KB/s на игрока в Рейде, с 200 до 11 в данже, и поверх всё ещё идёт сжатие. Получилось в 17-27 раз меньше.

Сервер работает на VPS в выделенном режиме, без графики, как сервис, который сам перезапускается при падении. Машина принимает только SSH по ключу и порт игры, блокирует тех, кто много раз ошибается с паролем, сама обновляется по ночам и каждый день делает бэкап аккаунтов. Домена у нас пока нет, поэтому клиент указывает на IP. Раз это тестовый сервер, его можно стереть и начать с нуля.

Следующий шаг

Позвать первых друзей поиграть одновременно и посмотреть, что сломается.

Изменения

  • 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.

← Назад к девлогу