Skip to content

Серверы для шматкарыстальніцкай гульні

Шматкарыстальніцкі рэлей 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
    # or
    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.

Збярыце рэлей з зыходнага коду і запусціце яго на любой машыне з набором інструментаў 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. Адкрыйце Налады ў En Parlant~
  2. Знайдзіце наладу URL рэлейнага сервера для шматкарыстальніцкай гульні
  3. Увядзіце WebSocket-канчатковую кропку вашага сервера:
    • Для Fly.io: wss://your-app-name.fly.dev
    • Для ўласнага сервера з TLS-проксі: wss://relay.yourdomain.com
    • Для лакальнай распрацоўкі: ws://localhost:3210

Вось і ўсё. Праграма будзе выкарыстоўваць ваш рэлей для ўсіх шматкарыстальніцкіх гульняў.

Падрабязнасці пра сервер

Section titled “Падрабязнасці пра сервер”

Некалькі рэчаў, якія варта ведаць пра працу рэлея:

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

  • Ачыстка пакояў — Пакоі аўтаматычна выдаляюцца пасля 30 хвілін бяздзейнасці. Задача ачысткі запускаецца кожныя 60 секунд для выдалення неактыўных пакояў.

  • Без пастаяннага сховішча — Увесь стан захоўваецца ў памяці. Калі сервер перазапусціцца, актыўныя пакоі будуць страчаны. Гэта зроблена наўмысна — рэлей не мае стану і лёгка замяняецца.

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