76 lines
No EOL
2.4 KiB
Markdown
76 lines
No EOL
2.4 KiB
Markdown
# 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 사용
|
|
데이터베이스와 서버를 한 번에 실행합니다.
|
|
```bash
|
|
docker compose up -d
|
|
```
|
|
|
|
### 로컬 빌드
|
|
```bash
|
|
# 빌드 환경 설정
|
|
./setup.sh
|
|
|
|
# 컴파일
|
|
cmake --build build
|
|
|
|
# 서버 실행
|
|
./build/Server
|
|
```
|
|
|
|
## 아키텍처 구성
|
|
- NetworkService: io_context 이벤트 루프 관리
|
|
- Session: 개별 클라이언트 비동기 수신/송신 처리
|
|
- PacketHandler: 패킷 ID별 로직 디스패칭
|
|
- SessionManager: 글로벌 세션 관리 및 브로드캐스팅
|
|
- DatabaseManager: 비동기 데이터베이스 작업 및 락 제어
|
|
- Packet: Protobuf 기반 직렬화 프로토콜 (proto/Protocol.proto)
|
|
|
|
```mermaid
|
|
flowchart TD
|
|
Client("Python GUI Client") <-->|"Protobuf (Packet)"| NetworkService
|
|
|
|
subgraph Server ["C++20 Sword Game Server"]
|
|
NetworkService["NetworkService(io_context 이벤트 루프)"]
|
|
SessionManager["SessionManager(글로벌 세션 관리 및 브로드캐스팅)"]
|
|
Session["Session(개별 클라이언트 비동기 송수신)"]
|
|
PacketHandler["PacketHandler(패킷 ID별 로직 디스패칭)"]
|
|
DatabaseManager["DatabaseManager(비동기 DB 작업 및 락 제어)"]
|
|
|
|
NetworkService -->|"Connection Accept"| Session
|
|
SessionManager -.->|"Manage & Broadcast"| Session
|
|
Session <-->|"Dispatch / Response"| PacketHandler
|
|
PacketHandler <-->|"Request DB Operation"| DatabaseManager
|
|
PacketHandler -->|"Broadcast Request"| SessionManager
|
|
end
|
|
|
|
DatabaseManager <-->|"SQL / 비동기 통신"| MySQL[(MySQL DB)]
|
|
```
|
|
|
|
## Python GUI 클라이언트
|
|
|
|
[README.md](https://git.bumpsoo.dev/bumpsoo/sword_game/src/branch/main/client/README.md)
|
|
|
|
## TODO: 개선 사항
|
|
- DB Connection Pool 도입
|
|
- 기능은 구현 완료, DB 커넥션 늘려서 테스트 필요 (headless client?)
|
|
- 검색 조회 기능 추가 (Mysql Full Text Search)
|
|
- big endian 강제되게 수정 |