多人游戏服务器
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 二进制文件、完成部署,并为您提供一个类似 your-app-name.fly.dev 的公共 URL。
从源代码构建中继服务器,并在任何安装了 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~ 中打开 Settings
- 找到多人游戏中继服务器 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 事件并转发给另一位玩家。没有游戏逻辑、没有走子验证、没有数据库。