Перейти до вмісту

Сервер для мультиплеєра

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

Вихідний код сервера ретрансляції знаходиться в репозиторії en-parlant-relay.

Навіщо розгортати власний сервер

Section titled “Навіщо розгортати власний сервер”

Стандартний сервер ретрансляції працює одразу після встановлення, але є вагомі причини запустити власний:

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

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

  1. Встановіть Fly CLI:

    Terminal window
    curl -L https://fly.io/install.sh | sh
  2. Зареєструйтеся або увійдіть:

    Terminal window
    fly auth signup
    # або
    fly auth login
  3. Клонуйте репозиторій ретранслятора та розгорніть:

    Terminal window
    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.

Самостійне розгортання

Section titled “Самостійне розгортання”

Зберіть ретранслятор із вихідного коду та запустіть на будь-якій машині з інструментарієм Rust.

  1. Клонуйте та зберіть:

    Terminal window
    git clone https://github.com/DarrellThomas/en-parlant-relay.git
    cd en-parlant-relay
    cargo build --release
  2. Запустіть сервер:

    Terminal window
    ./target/release/en-parlant-relay

    За замовчуванням сервер слухає порт 3210.

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

Сервер дуже легкий. Він зберігає ігрові кімнати в пам’яті, пересилає ходи між двома гравцями і не робить нічого іншого. Невеликий VPS або навіть Raspberry Pi впораються з ним без проблем.

Коли ваш ретранслятор запущено, направте En Parlant~ на нього:

  1. Відкрийте Settings у 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 від одного гравця та пересилає їх іншому. Ігрова логіка, валідація ходів та база даних відсутні.