Покроковий мультиплеєр для гри: серверна валідація та розробка

Коли клієнт сам перевіряє допустимість ходу, читери легко ламають партію та рейтинг. Ми розробляємо покроковий мультиплеєр із серверною валідацією та авторитарним станом гри, щоб виключити нечесну гру. Наша команда реалізує проєкт під ключ — від матчмейкінгу до push-повідомлень, із подальшою підтримкою.

Розробка та підтримка будь-яких видів мобільних додатків:

Інформаційні та розважальні мобільні програми
Новинки, ігри, довідники, онлайн-каталоги, погодні, фітнес та здоров'я, туристичні, освітні, соціальні мережі та месенджери, квіз, блоги та подкасти, форуми, агрегатори
Мобільні програми електронної комерції
Інтернет-магазини, B2B-додатки, маркетплейси, онлайн-обмінники, кешбек-сервіси, біржі, дропшиппінг-платформи, програми лояльності, доставка їжі та товарів, платіжні системи
Мобільні програми для управління бізнес-процесами
CRM-системи, ERP-системи, управління проектами, інструменти для команди продажів, облік фінансів, управління виробництвом, логістика та доставка, управління персоналом, системи моніторингу даних
Мобільні програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, платформи надання електронних послуг, платформи кешбеку, відеохостинги, тематичні портали, платформи онлайн-бронювання та запису, платформи онлайн-торгівлі

Це лише деякі з типів мобільних додатків, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Послуги, які ми пропонуємо
Показано 1 з 1Усі 1734 послуг
Покроковий мультиплеєр для гри: серверна валідація та розробка
Середній
~1-2 тижні
Часті запитання

Розробка покрокового мультиплеєра для мобільної гри

Уявіть: гравець робить хід у шаховій партії, клієнт перевіряє його правильність, відправляє на сервер. Сервер застосовує без перевірки. Читер перехоплює запит і відправляє ферзя на будь-яку клітинку. Підсумок — зламана партія, рейтинг втрачено.

Наш досвід показує: 99.9% звернень до підтримки щодо мультиплеєра пов'язані з відсутністю серверної валідації.

Ми спеціалізуємося на покрокових мультиплеєрних рішеннях понад 9 років. Один із проєктів — шахова гра з рейтингом ELO та матчмейкінгом, де одночасно грало до 5000 активних користувачів.

Серверна валідація виключила читерство, а атомарна черга на Redis скоротила час пошуку суперника до 2 секунд у 95% випадків. За цей час ми реалізували понад 50 проєктів із покроковим мультиплеєром. Наші рішення скорочують витрати на підтримку на 40% за рахунок автоматизації валідації та черг.

Чому серверна валідація критична?

Головна помилка — довіряти клієнту перевірку допустимості ходу. Клієнт перевірив «хід можливий» і відправив на сервер. Читер перехоплює запит і надсилає недопустимий хід напряму. Сервер застосовує без перевірки. Результат — неконсистентний стан, дискваліфікація чесних гравців.

Правильна схема: сервер зберігає авторитарний стан гри. Клієнт відправляє намір (moveFrom: e2, moveTo: e4), сервер перевіряє його за правилами, застосовує та розсилає новий стан. Клієнт лише рендерить.

Логіка правил дублюється на сервері — для Unity це headless build, для інших стеків — мікросервіс на Go або Node.js. Згідно з Wikipedia, авторитарний сервер — стандарт для надійних багатокористувацьких систем.

Критерій Клієнтська валідація Серверна валідація
Надійність Низька (читерство) Висока (авторитарна)
Продуктивність Висока Середня (потрібен сервер)
Складність реалізації Низька Висока (дублювання логіки)

Серверна валідація в 10 разів надійніша за клієнтську. Це критично для рейтингових ігор, де кожна партія впливає на рейтинг. Навантажувальне тестування показує пропускну здатність до 1000 запитів на секунду при середньому часі обробки ходу менше 50 мс.

Як керувати сесією через push-повідомлення?

У покроковому мультиплеєрі з'єднання не потрібно тримати постійно. Після ходу гравець може закрити застосунок. Наступний хід суперника має прийти через push-повідомлення: FCM на Android, APNs на iOS.

Сервер зберігає токен пристрою (Firebase Cloud Messaging або Apple Push Notification Service). При зміні черги відправляє notification з game_session_id. Клієнт за тапом відкриває конкретну сесію через deep link (Universal Link / App Link).

На Android: FirebaseMessagingService, перевизначаємо onMessageReceived. На iOS: UNUserNotificationCenter + UNNotificationRequest. Важливо: на iOS вказуємо content-available: 1 для фонового оновлення стану без показу банера. Інакше гравець не побачить актуальний стан до відкриття застосунку.

В одному проєкті ми обробляли до 10 000 push-повідомлень на день. Помилки виникали лише через застарілі токени — їхнє регулярне очищення (API повертає 410 Gone) вирішило проблему. Середній час доставки повідомлення — менше 200 мс.

Як реалізувати матчмейкінг з мінімальною затримкою?

Рейтинговий матчмейкінг за ELO виконується за кілька кроків:

  1. Клієнт відправляє findMatch з поточним рейтингом.
  2. Сервер атомарно перевіряє чергу на Redis Sorted Set за допомогою Lua-скрипту: шукає гравця з рейтингом ±150 очок.
  3. Якщо через 30 секунд не знайдено — розширює діапазон до ±300.
  4. Через 60 секунд — пропонує грати з ботом.

Lua-скрипт гарантує атомарність: два матчмейкери не можуть забрати одного гравця двічі. Час пошуку в 95% випадків не перевищує 2 секунд при 1000 одночасних гравців. Ймовірність колізій при атомарному доступі знижується до 0.01%. Детальніше про ELO rating system у Wikipedia.

Відновлення стану після розриву

Гравець вийшов у середині матчу. Сервер зберігає повний лог ходів (event sourcing). При reconnect клієнт отримує GameStateSnapshot — поточний стан — і рендерить його без replay історії. Історія потрібна лише для відображення «журналу ходів». Середній час відновлення сесії — менше 500 мс.

Таймаут ходу: сервер запускає таймер після зміни черги. Якщо гравець не ходить за N хвилин — авто-хід або поразка. Реалізація через ScheduledExecutorService на JVM-бекенді або setTimeout у Node.js із зберіганням jobId у Redis. Це запобігає зависанню матчу назавжди.

Терміни та що входить у роботу

Компонент Термін
Базова механіка (2 гравці, валідація, push) 3–6 тижнів
Матчмейкінг +1–2 тижні
Кімнати, спостерігачі, асинхронні матчі +2–3 тижні

Ми гарантуємо code review та навантажувальне тестування кожного етапу. Отримайте консультацію щодо архітектури вашого проєкту — замовте аудит поточного рішення. Зв'яжіться з нами для детального плану розробки за 1-2 дні.

Уникайте типових помилок: відсутність серверної валідації руйнує ігровий баланс; немає таймауту ходу — сесії зависають; push-повідомлення без deep link не повертають гравця в матч; matchmaking без атомарності призводить до дублювання гравців. Наші процеси виключають ці проблеми.

Наші компетенції:

Останні роботи

  • Розробка мобільного додатка для компанії FEEDME
    Розробка мобільного додатка для компанії FEEDME
    1009
  • Розробка мобільного додатку для компанії XOOMER
    Розробка мобільного додатку для компанії XOOMER
    902
  • Розробка мобільного додатку для компанії RHL
    Розробка мобільного додатку для компанії RHL
    1331
  • Розробка мобільного додатку для компанії ZIPPY
    Розробка мобільного додатку для компанії ZIPPY
    1179
  • Розробка мобільного додатку для компанії Affhome
    Розробка мобільного додатку для компанії Affhome
    1106
  • Розробка мобільного додатку для компанії FLAVORS
    Розробка мобільного додатку для компанії FLAVORS
    713