Backend сервер для многопользовательской онлайн-игры с поддержкой одновременных подключений, обработкой коллизий и интеграцией с базой данных PostgreSQL.
Многопользовательский игровой сервер, разработанный на C++17, который обрабатывает одновременные подключения множества игроков, обрабатывает коллизии объектов в реальном времени, ведет подсчет очков и сохраняет статистику игроков в базе данных PostgreSQL.
- Многопользовательская игра с поддержкой множества одновременных подключений
- Обработка коллизий объектов в реальном времени
- Система подсчета очков и статистики игроков
- Интеграция с PostgreSQL для хранения данных
- HTTP API для взаимодействия с клиентскими приложениями
- Система пулов соединений для оптимизации работы с БД
- Автоматический выход игроков на пенсию по истечении времени
- C++17 - основной язык программирования
- Boost.Asio - асинхронное сетевое программирование
- PostgreSQL (pqxx) - работа с базой данных
- HTTP сервер - обработка HTTP запросов
- Многопоточность - std::thread, std::jthread для параллельной обработки
- Система пулов соединений - оптимизация работы с БД
- JSON парсинг - boost::json для обработки данных
- Docker - контейнеризация приложения
- CMake и Conan - система сборки и управления зависимостями
solution/
├── src/
│ ├── main.cpp # Точка входа, инициализация сервера
│ ├── application.h/cpp # Основная логика приложения
│ ├── request_handler.h/cpp # Обработка HTTP запросов
│ ├── model.h/cpp # Игровые модели (Game, Map, Player, Dog)
│ ├── collision_detector.h/cpp # Обработка коллизий
│ ├── json_loader.h/cpp # Загрузка конфигурации из JSON
│ └── database.h/cpp # Работа с PostgreSQL
├── data/
│ └── config.json # Конфигурация игры
├── CMakeLists.txt # Конфигурация сборки
├── conanfile.txt # Зависимости Conan
└── Dockerfile # Docker конфигурация
- Компилятор с поддержкой C++17
- Boost библиотеки (Asio, JSON)
- PostgreSQL клиентская библиотека (pqxx)
- CMake 3.10+
- Conan (для управления зависимостями)
- Docker (опционально, для контейнеризации)
# Установите Conan
pip install conan
# Создайте профиль Conan
conan profile detect --force
# Установите зависимости
conan install . --output-folder=build --build=missingmkdir build
cd build
cmake .. -DCMAKE_TOOLCHAIN_FILE=../build/conan_toolchain.cmake
cmake --build .export GAME_DB_URL="postgresql://user:password@localhost:5432/gamedb"{
"maps": [
{
"id": "map1",
"name": "Map 1",
"roads": [...],
"buildings": [...],
"offices": [...]
}
],
"dogRetirementTime": 60.0
}./game_server \
--config-file data/config.json \
--www-root static \
--tick-period 1000docker build -t game-server .
docker run -p 8080:8080 \
-e GAME_DB_URL="postgresql://user:pass@host:5432/db" \
-v $(pwd)/data:/app/data \
-v $(pwd)/static:/app/static \
game-serverПрисоединение игрока к игре.
Request:
{
"userName": "Player1",
"mapId": "map1"
}Response:
{
"authToken": "token123",
"playerId": "player-id-123"
}Получение списка игроков.
Headers:
Authorization: Bearer <authToken>
Отправка действия игрока.
Request:
{
"move": "U"
}Получение текущего состояния игры.
Ручной тик игры (если не используется автоматический).
- Асинхронная обработка: использование Boost.Asio для неблокирующих операций
- Пул соединений: оптимизация работы с БД через пул соединений
- Обработка коллизий: эффективный алгоритм определения столкновений
- Многопоточность: параллельная обработка запросов от множества клиентов
- Автоматический тик: опциональная автоматическая обработка игрового цикла
- Версия 1: Базовая структура проекта, настройка сборки
- Версия 2: Добавлена веб-часть и статические файлы для фронтенда
- Версия 3: Добавлена система подсчета очков и обработка игровой логики
- Версия 4 (текущая): Интеграция с PostgreSQL, пул соединений, обработка коллизий, система выхода игроков на пенсию
Михаил Нестеров
Этот проект создан в образовательных целях.