跳转到内容

多人游戏服务器

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 二进制文件、完成部署,并为您提供一个类似 your-app-name.fly.dev 的公共 URL。

从源代码构建中继服务器,并在任何安装了 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~ 中打开 Settings
  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 事件并转发给另一位玩家。没有游戏逻辑、没有走子验证、没有数据库。