No description
Find a file
2026-02-06 23:44:54 +00:00
client fix: stop token으로 변경되어 필요없는 flag 제거 2026-02-05 13:37:00 +00:00
include refactor: 시그널 관리 컨텍스트와 네트워크 서비스 컨텍스트 통합 2026-02-05 13:52:11 +00:00
server refactor: 시그널 관리 컨텍스트와 네트워크 서비스 컨텍스트 통합 2026-02-05 13:52:11 +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 doc: update README 2026-02-06 23:44:54 +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 Sword Game Server

Boost.Asio와 MySQL을 활용한 간단한 소켓 게임 서버 프로젝트입니다.

주요 기능

  • C++20: jthread, stop_token, 코루틴(co_await) 사용
  • 네트워크: Boost.Asio 기반 비동기 I/O 처리
  • 데이터베이스: MySQL 연동을 통한 유저 데이터 영속성 관리
  • 동기화: strand 및 비동기 락을 이용한 자원 보호
  • 도커: Docker Compose를 이용한 서버 및 DB 환경 자동 구성

사전 요구 사항

  • g++ 14 or higher (C++20 support)
  • CMake 3.20+
  • Boost 1.83+
  • OpenSSL
  • MySQL/MariaDB Client

실행 방법

Docker 사용

데이터베이스와 서버를 한 번에 실행합니다.

docker compose up -d

클라이언트를 실행하여 서버에 접속합니다.

docker run --rm -it --network sword_game_network -e SERVER_HOST=game_server sword_game-server build/Client

로컬 빌드

# 빌드 환경 설정
./setup.sh

# 컴파일
cmake --build build

# 서버 실행
./build/Server

# 클라이언트 실행
./build/Client

아키텍처 구성

  • NetworkService: io_context 이벤트 루프 관리
  • Session: 개별 클라이언트 비동기 수신/송신 처리
  • PacketHandler: 패킷 ID별 로직 디스패칭
  • SessionManager: 글로벌 세션 관리 및 브로드캐스팅
  • DatabaseManager: 비동기 데이터베이스 작업 및 락 제어
  • Packet: 바이너리 프로토콜 정의 (pragma pack(1))

TODO: 개선 사항

  • 현재 서버 메모리에만 유지되는 검 강화 상태를 DB에 저장하여, 재접속 시에도 이전 상태가 그대로 복구되도록 구현.
  • Connection Pool 도입
  • protocol 변경 후 다른 언어로 구현된 클라이언트 대응