这个项目能做什么
Gamend 是一个用 Elixir 编写的开源多人游戏后端。它面向自托管:没有可购买的服务,项目将自身定位为游戏周边的服务器端层,而不是游戏本身。游戏仍在本地渲染和模拟,而服务器端脚本让真正的逻辑在服务器上运行,因此计分、奖励、匹配规则和验证都在玩家无法编辑的地方决定。后台任务和定时任务也在那里运行。
README 中描述的功能集:
- 认证:邮箱/密码、魔法链接、OAuth(Discord、Google、Apple、Facebook、GitHub、Steam)和 JWT API 令牌。
- 用户:个人资料、元数据、设备令牌和账户生命周期。
- 大厅:由房主管理、最大用户数、隐藏/锁定状态、密码和实时更新。
- 群组:公开、私有或隐藏的社区,带角色、加入请求和邀请。
- 队伍:基于邀请的临时群组,默认 2–32 名玩家,与大厅集成。
- 好友:请求、接受/拒绝和屏蔽。
- 聊天:大厅、群组、队伍和好友私信,带已读游标和未读计数。
- 通知:针对社交事件的类型化通知、已读/未读状态和实时投递,以及按设备令牌路由的 FCM 和 APNs 直连移动推送。
- 任务与进度:事件驱动引擎,涵盖成就、每日/每周任务、事件窗口和任务链,奖励以恰好一次的方式进入经济系统。
- 排行榜:全局和按用户排名。
- 支付:Stripe Checkout、Google Play、App Store 和 Steam 提供商流程,带收据验证、webhook、权益、退款和管理工具。
- 键值存储:带访问控制钩子的服务器端存储。
- 服务器脚本:在服务器事件(如登录、大厅创建或任务完成)上的钩子,可用 Elixir、GDScript(编译而非解释)或任何 BEAM 语言编写。
- 后台任务:来自服务器钩子的持久、可重试的后台任务和 cron 任务,基于 Postgres 或 SQLite。
- 经济与库存:虚拟货币钱包,带原子化、可审计的账本,以及物品堆叠;服务器权威的授予/消费/消耗,带实时余额更新。
- 对象存储:头像和 UGC 上传,带可插拔后端,可以是本地磁盘或任何兼容 S3 的服务,如 AWS S3、Cloudflare R2 或 MinIO。
- 管理门户:用于管理资源的内置 Web 仪表板。
客户端 SDK 提供用于 Godot(也列在 Godot Asset Library 上)、通过 Balaur 附加组件的 Rune、带可插拔传输的 C++17、npm 上的 JavaScript,以及一个 Elixir SDK,包含用于自定义钩子中 IDE 自动补全的存根模块。Godot、Balaur 和 C++ SDK 在每次 main 变更时重新构建,并附加到最新版本。
本地运行需要 Elixir 1.20 和 Erlang/OTP 29、用于 WebRTC 原生依赖(ex_sctp)的 Rust,以及可选的 PostgreSQL——开发默认使用 SQLite,数据库适配器在编译时选择。首次运行是 `cp .env.example .env`、`mix setup`、`mix dev.start`,然后访问 localhost:4000。Docker Compose 文件涵盖单实例和带 nginx、PostgreSQL 和 Redis 的多实例设置。部署指南和起始模板面向 fly.io 上的生产部署。
README 还包含一张性能图表,按机器规格、内存和月价格比较并发空闲玩家,引用了一个测量数据:在一个核心、3 GB 内存上达到 37,854 个并发空闲玩家,并与已发布的对比数据进行比较,附有性能和负载测试文档的链接以了解复现细节。还提供了一个用于 AI 工具的 AGENTS.md 文件。
评论
0 人表达喜爱 · 满10人后显示 Deer Point
登录后参与讨论。