Мультиплеерный сервер
Мультиплеерный ретранслятор En Parlant~ — это легковесный WebSocket-сервер, написанный на Rust с использованием Axum и socketioxide. Он соединяет двух игроков для шахматной партии в реальном времени через Socket.IO, не требуя постоянного хранилища данных и минимально потребляя ресурсы.
Исходный код сервера-ретранслятора находится в репозитории en-parlant-relay.
Зачем размещать собственный сервер
Заголовок раздела «Зачем размещать собственный сервер»Ретранслятор по умолчанию работает сразу из коробки, но есть веские причины запустить собственный:
- Конфиденциальность — весь игровой трафик остаётся на вашей инфраструктуре
- Меньшая задержка — разверните сервер ближе к игрокам для более быстрой передачи ходов
- Независимость — нет зависимости от доступности и работоспособности ретранслятора по умолчанию
Варианты развёртывания
Заголовок раздела «Варианты развёртывания»Fly.io (рекомендуется)
Заголовок раздела «Fly.io (рекомендуется)»Репозиторий ретранслятора включает конфигурационный файл fly.toml, что делает Fly.io самым простым способом развёртывания. Бесплатный тариф Fly.io подходит для личного использования.
-
Установите Fly CLI:
Окно терминала curl -L https://fly.io/install.sh | sh -
Зарегистрируйтесь или войдите в систему:
Окно терминала fly auth signup# orfly auth login -
Клонируйте репозиторий и выполните развёртывание:
Окно терминала git clone https://github.com/DarrellThomas/en-parlant-relay.gitcd en-parlant-relayfly launchfly deploy
Fly.io соберёт бинарный файл Rust, развернёт его и предоставит вам публичный URL вида your-app-name.fly.dev.
Самостоятельное размещение
Заголовок раздела «Самостоятельное размещение»Соберите ретранслятор из исходного кода и запустите его на любой машине с установленным набором инструментов Rust.
-
Клонируйте и соберите:
Окно терминала git clone https://github.com/DarrellThomas/en-parlant-relay.gitcd en-parlant-relaycargo build --release -
Запустите сервер:
Окно терминала ./target/release/en-parlant-relayПо умолчанию сервер слушает порт 3210.
-
Для использования в продакшене запускайте сервер за обратным прокси (nginx, Caddy или аналогичным) для обработки TLS-терминации. Сам ретранслятор работает по обычному WebSocket — ваш прокси добавляет уровень шифрования
wss://.
Сервер очень легковесный. Он хранит игровые комнаты в памяти, пересылает ходы между двумя игроками и не делает ничего другого. Небольшой VPS или даже Raspberry Pi справится с этой задачей без проблем.
Настройка En Parlant~
Заголовок раздела «Настройка En Parlant~»После запуска ретранслятора укажите его адрес в En Parlant~:
- Откройте Настройки в En Parlant~
- Найдите параметр URL мультиплеерного сервера-ретранслятора
- Введите WebSocket-адрес вашего сервера:
- Для Fly.io:
wss://your-app-name.fly.dev - Для самостоятельного размещения с TLS-прокси:
wss://relay.yourdomain.com - Для локальной разработки:
ws://localhost:3210
- Для Fly.io:
Вот и всё. Приложение будет использовать ваш ретранслятор для всех мультиплеерных игр.
Подробности о сервере
Заголовок раздела «Подробности о сервере»Несколько важных моментов о работе ретранслятора:
-
Коды комнат — Сервер генерирует 6-символьные игровые коды, используя набор однозначных символов. Символы, которые легко перепутать, исключены (нет
0/O, нет1/I/L), чтобы избежать путаницы при устном обмене кодами. -
Очистка комнат — Комнаты автоматически удаляются после 30 минут бездействия. Задача очистки запускается каждые 60 секунд для удаления неактивных комнат.
-
Отсутствие постоянного хранилища — Всё состояние хранится в оперативной памяти. При перезапуске сервера активные комнаты теряются. Это сделано намеренно — ретранслятор не хранит состояния и легко заменяем.
-
Минимальные ресурсы — Сервер использует очень мало процессорного времени и памяти. Он лишь принимает события Socket.IO от одного игрока и пересылает их другому. Никакой игровой логики, никакой валидации ходов, никакой базы данных.