• Игровой сервер для кооперативного экшена - авторитетная симуляция, матчмейкинг и античит на базе Node.js + Colyseus

    3 часа назад
    • Желаемый бюджет до 850.75 USD
    • Ожидает исполнителя...
  • Исходная ситуация - есть прототип кооперативной игры на Unity (Netcode for GameObjects) для 2-8 игроков. На P2P появились проблемы - рассинхроны, лаг-компенсация отсутствует, хост выходит - матч разваливается, читеры подменяют параметры урона и скорости. Требуется перейти на выделенный авторитетный сервер с комнатами, матчмейкингом и минимальным античитом, сохранив текущую логику боя и инвентаря.

    Техническая среда - Linux (Ubuntu 22.04), Docker, Node.js 20 LTS, Colyseus 0.15+, Redis (для очередей и присутствия), PostgreSQL (для аккаунтов и прогресса), Nginx (TLS termination), GitHub Actions (CI). Клиент Unity 2022 LTS, транспорт WebSocket (без WebRTC). Развёртывание в одном регионе (пока без мульти-региона).

    Что должно получиться - рабочий серверный backend с авторитетной симуляцией ключевых механик (передвижение, получение урона, смерть/респавн, лут и инвентарь) и инфраструктурой матчей. Результат должен быть воспроизводимо разворачиваемым в Docker Compose и иметь базовый набор метрик/логов для диагностики.

    Объём работ по этапам
    1) Анализ текущей сетевой модели - разобрать протокол сообщений клиента, выделить состояния, которые должны стать серверными, и предложить схему событий/снапшотов. Итогом должен быть документ на 1-2 страницы с перечнем authoritative state, списком client commands и планом миграции.
    2) Реализация сервера Colyseus
    - Комнаты матчей с жизненным циклом: ожидание - запуск - игра - завершение
    - Matchmaking по режиму и диапазону MMR (упрощённо) с очередью в Redis
    - Авторитетная обработка команд клиента: input movement, use item, attack, pickup, drop
    - Серверная валидация: скорость, частота атак, радиусы подбора, cooldowns
    - Tickrate 20/s, снапшоты состояния 10/s, интерполяция на клиенте остаётся на стороне Unity (нужно определить формат данных)
    3) Сохранение и прогресс
    - PostgreSQL схема: users, sessions, progression (минимально), match_results
    - JWT авторизация (access token) и серверная проверка на входе в комнату
    - Запись результатов матча и обновление MMR
    4) Античит минимального уровня
    - Rate limiting на команды
    - Серверные проверки невозможных состояний (teleport, speedhack, rapid fire)
    - Система нарушений: N подозрительных событий за матч - пометка в match_results и кик из комнаты
    5) Инфраструктура и качество
    - Docker Compose: game-server, redis, postgres, nginx
    - Healthchecks, structured logging (pino или аналог), базовые метрики (Prometheus endpoint или простые counters в /metrics)
    - GitHub Actions: линт, тесты (минимум unit на валидацию команд), сборка Docker образа

    Ограничения
    - Нельзя использовать managed-сервисы, всё должно работать на одной машине в Docker Compose
    - Без покупки платных античит-решений и без kernel-драйверов
    - Клиент Unity менять можно минимально - допускается добавление тонкого слоя адаптера для нового протокола и интерполяции, но без переписывания всей игры
    - Внешние зависимости должны быть распространёнными и активно поддерживаемыми

    Измеримые критерии приёмки
    - Поднимается одной командой docker compose up, после чего доступны: /health, /metrics, создание матчей и подключение клиентов
    - Под нагрузкой 8 игроков в одной комнате сервер держит 20 tick/s без деградации более 10% на машине 4 vCPU 8GB (проверка простым скриптом-ботом или встроенным load-сценарием)
    - Сервер отклоняет как минимум 5 типов чит-команд: превышение скорости, ускоренная атака, попытка нанести урон без попадания по серверной модели, подбор лута вне радиуса, спам команд сверх лимита
    - Результаты матча пишутся в PostgreSQL, MMR обновляется, повторный вход пользователя сохраняет прогресс
    - В репозитории есть README с шагами запуска, переменными окружения и описанием протокола сообщений

    Доступные материалы - текущий Unity проект (репозиторий), описание игровых механик, список сообщений/событий в текущем прототипе. Ожидается итоговый PR/репозиторий с сервером, конфигами, миграциями БД и минимальными правками клиента, необходимыми для подключения к новому серверу.
Ваше предложение

Вы ещё не оставили предложение к этому заказу.
Нажмите «Предложить услугу», чтобы отправить своё предложение.

Нужно похожее задание?

Если задача похожа на вашу, можно посмотреть готовые услуги в категории или создать свое задание с нужным бюджетом, сроками и требованиями.

Задание «Игровой сервер для кооперативного экшена - авторитетная симуляция, матчмейкинг и античит на базе Node.js + Colyseus» можно использовать как ориентир для своего брифа: что нужно сделать, какой результат нужен и какой бюджет указать.