• 合作动作游戏服务器——基于Node.js + Colyseus的权威模拟、匹配、反作弊

    3 小时 前
    • 所需预算高达 850.75 USD
    • 等待表演者...
  • 最初的情况是Unity中有一个2-8人合作游戏的原型(Netcode for GameObjects)。 P2P 上出现了问题 - 不同步、没有延迟补偿、主机退出 - 比赛失败、作弊者更改伤害和速度参数。您需要切换到具有房间、配对和最低限度反作弊功能的专用信誉良好的服务器,同时保持当前的战斗和库存逻辑。

    技术环境 - Linux (Ubuntu 22.04)、Docker、Node.js 20 LTS、Colyseus 0.15+、Redis(用于队列和状态)、PostgreSQL(用于帐户和进度)、Nginx(TLS 终止)、GitHub Actions (CI)。 Unity 2022 LTS 客户端,WebSocket 传输(无 WebRTC)。在一个区域部署(尚无多区域)。

    应该发生的是一个工作服务器后端,具有对关键机制(移动、受到伤害、死亡/重生、战利品和库存)和匹配基础设施的权威模拟。结果应该可以在 Docker Compose 中重复部署,并具有一组用于诊断的基本指标/日志。

    分阶段工作范围
    1)分析当前网络模型——分析客户端消息协议,突出显示应该成为服务器状态的状态,并提出事件/快照方案。结果应该是一个 1-2 页的文档,其中包含权威状态列表、客户端命令列表和迁移计划。
    2)Colyseus服务器的实现
    - 匹配房间的生命周期:等待-开始-玩-结束
    - 通过模式和 MMR 范围(简化)与 Redis 中的队列进行匹配
    - 权威处理客户端命令:输入动作、使用物品、攻击、拾取、掉落
    - 服务器验证:速度、攻击频率、拾取半径、冷却时间
    - Tickrate 20/s,状态快照10/s,客户端插值保留在Unity端(需要确定数据格式)
    3)保存并进行
    - PostgreSQL 模式:用户、会话、进度(最小值)、match_results
    - 房间入口处的 JWT 授权(访问令牌)和服务器验证
    - 记录比赛结果并更新MMR
    4) 反作弊最低级别
    - 命令速率限制
    - 服务器检查不可能的状态(传送、加速、快速射击)
    - 违规系统:每场比赛有 N 个可疑事件 - 在比赛结果中标记并踢出房间
    5)基础设施和质量
    - Docker Compose:游戏服务器、redis、postgres、nginx
    - 健康检查、结构化日志记录(pino 或类似)、基本指标(Prometheus 端点或 /metrics 中的简单计数器)
    - GitHub Actions:linting、测试(命令验证的最小单元)、构建 Docker 镜像

    限制
    - 您不能使用托管服务,一切都必须在 Docker Compose 中的一台机器上运行
    - 无需购买付费反作弊解决方案且无需内核驱动程序
    - Unity 客户端可以进行最小程度的更改 - 可以为新协议和插值添加薄适配器层,但无需重写整个游戏
    - 外部依赖关系应该是常见的并积极维护

    可衡量的验收标准
    - 使用一个 docker compose up 命令引发,之后以下内容可用:/health、/metrics、创建匹配和连接客户端
    - 在一个房间内有 8 个玩家的负载下,服务器在 4 vCPU 8GB 机器上保持 20 tick/s,性能下降不超过 10%(使用简单的机器人脚本或内置负载脚本检查)
    - 服务器拒绝至少5种作弊命令:超速、加速攻击、试图在不击中服务器模型的情况下造成损害、拾取半径外的战利品、超出限制的垃圾邮件命令
    - 比赛结果写入PostgreSQL,MMR更新,用户重新登录保存进度
    - 存储库有一个自述文件,其中包含启动步骤、环境变量和消息协议的描述

    可用材料 - 当前的 Unity 项目(存储库)、游戏机制的描述、当前原型中的消息/事件列表。最终的 PR/存储库包含连接到新服务器所需的服务器、配置、数据库迁移和最少的客户端编辑。
您的报价

您尚未提交此订单的报价。
点击“提交报价”发送您的报价。

需要类似的任务吗?

如果该项目接近您的需求,您可以查看该类别中的现成服务或发布您自己的任务以及所需的预算、截止日期和要求。

The project «合作动作游戏服务器——基于Node.js + Colyseus的权威模拟、匹配、反作弊» can be used as a reference for your own brief: what should be done, what result is needed and what budget to set.