跳到內容

多人遊戲伺服器

En Parlant~ 多人遊戲中繼是一個輕量級的 WebSocket 伺服器,使用 Rust 搭配 Axum 和 socketioxide 編寫。它透過 Socket.IO 連接兩位玩家進行即時西洋棋對弈,無需持久化儲存且資源需求極低。

中繼伺服器的原始碼位於 en-parlant-relay 儲存庫中。

預設的中繼伺服器開箱即用,但自行架設有充分的理由:

  • 隱私 —— 所有遊戲流量都留在您的基礎設施上
  • 更低的延遲 —— 部署在離玩家更近的位置,加快棋步傳輸速度
  • 獨立性 —— 不依賴預設中繼伺服器的運行時間或可用性

中繼儲存庫包含 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

就這樣。應用程式將使用您的中繼伺服器進行所有多人遊戲。

以下是關於中繼伺服器運作方式的一些須知:

  • 房間代碼 —— 伺服器使用不易混淆的字元集產生 6 個字元的遊戲代碼。外觀相似的字元會被排除(沒有 0/O,沒有 1/I/L),以避免口頭分享代碼時產生混淆。

  • 房間清理 —— 房間在閒置 30 分鐘後會自動移除。清理任務每 60 秒執行一次,清除閒置的房間。

  • 無持久化儲存 —— 所有狀態都保存在記憶體中。如果伺服器重新啟動,進行中的房間將會遺失。這是刻意的設計——中繼伺服器是無狀態的,可輕易替換。

  • 資源需求極低 —— 伺服器使用極少的 CPU 和記憶體。它只接收來自一位玩家的 Socket.IO 事件並轉發給另一位。沒有遊戲邏輯、沒有棋步驗證、沒有資料庫。