多人遊戲伺服器
En Parlant~ 多人遊戲中繼是一個輕量級的 WebSocket 伺服器,使用 Rust 搭配 Axum 和 socketioxide 編寫。它透過 Socket.IO 連接兩位玩家進行即時西洋棋對弈,無需持久化儲存且資源需求極低。
中繼伺服器的原始碼位於 en-parlant-relay 儲存庫中。
為什麼要自行架設
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# orfly 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。
從原始碼建置中繼伺服器,並在任何安裝了 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~ 指向它:
- 在 En Parlant~ 中開啟設定
- 找到多人遊戲中繼伺服器 URL 設定項目
- 輸入您伺服器的 WebSocket 端點:
- Fly.io:
wss://your-app-name.fly.dev - 自行架設並使用 TLS 代理:
wss://relay.yourdomain.com - 本機開發:
ws://localhost:3210
- Fly.io:
就這樣。應用程式將使用您的中繼伺服器進行所有多人遊戲。
以下是關於中繼伺服器運作方式的一些須知:
-
房間代碼 —— 伺服器使用不易混淆的字元集產生 6 個字元的遊戲代碼。外觀相似的字元會被排除(沒有
0/O,沒有1/I/L),以避免口頭分享代碼時產生混淆。 -
房間清理 —— 房間在閒置 30 分鐘後會自動移除。清理任務每 60 秒執行一次,清除閒置的房間。
-
無持久化儲存 —— 所有狀態都保存在記憶體中。如果伺服器重新啟動,進行中的房間將會遺失。這是刻意的設計——中繼伺服器是無狀態的,可輕易替換。
-
資源需求極低 —— 伺服器使用極少的 CPU 和記憶體。它只接收來自一位玩家的 Socket.IO 事件並轉發給另一位。沒有遊戲邏輯、沒有棋步驗證、沒有資料庫。