Перейти к содержимому

Мультиплеерный сервер

Мультиплеерный ретранслятор En Parlant~ — это легковесный WebSocket-сервер, написанный на Rust с использованием Axum и socketioxide. Он соединяет двух игроков для шахматной партии в реальном времени через Socket.IO, не требуя постоянного хранилища данных и минимально потребляя ресурсы.

Исходный код сервера-ретранслятора находится в репозитории en-parlant-relay.

Ретранслятор по умолчанию работает сразу из коробки, но есть веские причины запустить собственный:

  • Конфиденциальность — весь игровой трафик остаётся на вашей инфраструктуре
  • Меньшая задержка — разверните сервер ближе к игрокам для более быстрой передачи ходов
  • Независимость — нет зависимости от доступности и работоспособности ретранслятора по умолчанию

Репозиторий ретранслятора включает конфигурационный файл fly.toml, что делает Fly.io самым простым способом развёртывания. Бесплатный тариф Fly.io подходит для личного использования.

  1. Установите Fly CLI:

    Окно терминала
    curl -L https://fly.io/install.sh | sh
  2. Зарегистрируйтесь или войдите в систему:

    Окно терминала
    fly auth signup
    # or
    fly auth login
  3. Клонируйте репозиторий и выполните развёртывание:

    Окно терминала
    git clone https://github.com/DarrellThomas/en-parlant-relay.git
    cd en-parlant-relay
    fly launch
    fly deploy

Fly.io соберёт бинарный файл Rust, развернёт его и предоставит вам публичный URL вида your-app-name.fly.dev.

Соберите ретранслятор из исходного кода и запустите его на любой машине с установленным набором инструментов Rust.

  1. Клонируйте и соберите:

    Окно терминала
    git clone https://github.com/DarrellThomas/en-parlant-relay.git
    cd en-parlant-relay
    cargo build --release
  2. Запустите сервер:

    Окно терминала
    ./target/release/en-parlant-relay

    По умолчанию сервер слушает порт 3210.

  3. Для использования в продакшене запускайте сервер за обратным прокси (nginx, Caddy или аналогичным) для обработки TLS-терминации. Сам ретранслятор работает по обычному WebSocket — ваш прокси добавляет уровень шифрования wss://.

Сервер очень легковесный. Он хранит игровые комнаты в памяти, пересылает ходы между двумя игроками и не делает ничего другого. Небольшой VPS или даже Raspberry Pi справится с этой задачей без проблем.

После запуска ретранслятора укажите его адрес в En Parlant~:

  1. Откройте Настройки в En Parlant~
  2. Найдите параметр URL мультиплеерного сервера-ретранслятора
  3. Введите WebSocket-адрес вашего сервера:
    • Для Fly.io: wss://your-app-name.fly.dev
    • Для самостоятельного размещения с TLS-прокси: wss://relay.yourdomain.com
    • Для локальной разработки: ws://localhost:3210

Вот и всё. Приложение будет использовать ваш ретранслятор для всех мультиплеерных игр.

Несколько важных моментов о работе ретранслятора:

  • Коды комнат — Сервер генерирует 6-символьные игровые коды, используя набор однозначных символов. Символы, которые легко перепутать, исключены (нет 0/O, нет 1/I/L), чтобы избежать путаницы при устном обмене кодами.

  • Очистка комнат — Комнаты автоматически удаляются после 30 минут бездействия. Задача очистки запускается каждые 60 секунд для удаления неактивных комнат.

  • Отсутствие постоянного хранилища — Всё состояние хранится в оперативной памяти. При перезапуске сервера активные комнаты теряются. Это сделано намеренно — ретранслятор не хранит состояния и легко заменяем.

  • Минимальные ресурсы — Сервер использует очень мало процессорного времени и памяти. Он лишь принимает события Socket.IO от одного игрока и пересылает их другому. Никакой игровой логики, никакой валидации ходов, никакой базы данных.