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