No description
Find a file
2026-02-05 13:18:38 +00:00
client fix: 클라이언트 강제 종료 처리 추가. 2026-02-05 13:18:38 +00:00
include feat: 강화 결과 채팅으로 모든 클라이언트가 같이 공유 2026-02-05 12:20:54 +00:00
server feat: docker 이용한 서버 실행 및 사용 설명 추가, 환경변수 이용한 주소 2026-02-05 13:02:07 +00:00
.dockerignore feat: docker 이용한 서버 실행 및 사용 설명 추가, 환경변수 이용한 주소 2026-02-05 13:02:07 +00:00
.gitignore init 2026-02-04 12:49:42 +00:00
CMakeLists.txt feat: server, client 디렉토리 조정 및 client 헤더 파일 추가. 시나리오 2026-02-04 14:01:55 +00:00
compose.yml feat: docker 이용한 서버 실행 및 사용 설명 추가, 환경변수 이용한 주소 2026-02-05 13:02:07 +00:00
Dockerfile feat: docker 이용한 서버 실행 및 사용 설명 추가, 환경변수 이용한 주소 2026-02-05 13:02:07 +00:00
README.md feat: docker 이용한 서버 실행 및 사용 설명 추가, 환경변수 이용한 주소 2026-02-05 13:02:07 +00:00
schema.sql init 2026-02-04 12:49:42 +00:00
setup.sh init 2026-02-04 12:49:42 +00:00
test_scenario.txt feat: server, client 디렉토리 조정 및 client 헤더 파일 추가. 시나리오 2026-02-04 14:01:55 +00:00

C++20 게임 서버 (SocketServer)

개요

이 프로젝트는 Modern C++ (C++20)와 Boost.Asio를 사용한 게임 서버 코어를 보여줍니다. 비동기 I/O, 멀티스레딩, 패킷 직렬화 및 글로벌 세션 관리 시스템을 특징으로 합니다.

주요 기능

  • C++20: std::span, std::jthread, std::format (준비됨) 및 Concepts 활용.
  • Boost.Asio: 확장 가능한 네트워킹을 위한 Proactor 패턴 적용.
  • 패킷 처리: 효율적인 헤더/바디 분리 및 디스패칭.
  • 스레드 안전성: 뮤텍스(mutex)를 사용한 공유 자원 보호.
  • 글로벌 세션 관리: 모든 접속자를 한곳에서 관리하고 브로드캐스팅하는 시스템.
  • 검 키우기 컨텐츠: MySQL 연동을 통한 유저 데이터 영속성 및 강화 로직

사전 요구 사항 (로컬 작동 확인한 환경, debian 13)

  • g++ 14.2.0
  • CMake 3.31.6
  • Boost Libraries 1.83.0
  • OpenSSL 3.5.4
  • MariaDB Client Library 11.8.3

Docker 실행

docker compose up -d

# 서버에 연결
 docker run --rm -it --entrypoint /app/build/Client --network sword_game_network -e SERVER_HOST=game_server sword_game-server

환경 설정

./setup.sh

빌드

cmake --build build

실행 방법

  1. 서버 시작:
    ./build/Server
    
  2. 클라이언트 실행:
    ./build/Client
    

아키텍처

  • NetworkService: io_context 및 스레드 풀 관리.
  • Session: 개별 클라이언트 연결 및 비동기 읽기/쓰기 루프 처리.
  • PacketHandler: 패킷 ID에 따른 로직 디스패칭.
  • SessionManager: 연결된 모든 클라이언트를 글로벌하게 관리하고 메시지를 브로드캐스팅하는 싱글톤 관리자.
  • DatabaseManager: Boost.MySQL을 사용한 비동기 데이터베이스 연동 및 데이터 영속화 관리.
  • Logger: 멀티스레드 환경에서 안전한 로그 출력을 위한 스레드 세이프 로거.
  • Packet: #pragma pack(1)을 사용한 효율적인 바이너리 프로토콜 정의.