.NET 9 기반 TCP 게임 서버 프레임워크. NetCoreServer(클라이언트 통신) + NetMQ(서버 간 통신)로 구성.
Client ──TCP──► Gateway (Dumb Proxy) ──NetMQ P2P──► GameServer (Smart Hub)
│
NetMQ Mesh
│
Stateless Services
- Game Session Channel (Data Plane): Client ↔ Gateway ↔ GameServer — 유저 패킷 전용
- Node Service Mesh (Control Plane): 서버 간 RPC 통신 — Full Mesh 토폴로지
| 구분 | 기술 |
|---|---|
| 런타임 | .NET 9, C# 13 |
| 클라이언트 통신 | NetCoreServer (TCP) |
| 서버 간 통신 | NetMQ (ZeroMQ) |
| 직렬화 | Protocol Buffers |
| 세션 관리 | Redis (SSOT) |
| 로깅 | Serilog + OpenTelemetry |
| 오케스트레이션 | .NET Aspire |
| 스트레스 테스트 | DFrame |
ASP.NET 스타일의 어트리뷰트 기반 패킷 핸들러:
[NodeController]
public class LoginController(ISessionManager sessions)
{
[NodePacketHandler(MessageId.LoginRequest)]
public async ValueTask HandleLogin(NodePacket packet)
{
// ...
}
}| 서버 | 역할 |
|---|---|
| Gateway | TCP I/O, 패킷 포워딩, 암호화/복호화, 압축/해제 |
| GameServer | 패킷 파싱, 세션 검증, 비즈니스 로직 |
- ECDH P-256 키 교환 + ECDSA P-256 서명 (MITM 방어)
- AES-256-GCM 세션 암호화
- 패킷 단위 선택적 적용 (Flags 기반)
상세: docs/ENCRYPTION_COMPRESSION_DESIGN.md
- Redis 기반 Service Discovery — 서버 목록을 Redis에 등록/조회
- 주기적 Heartbeat로 서버 상태 감시
- 신규 서버 추가 시 자동 감지 및 연결, 장애 서버 자동 제거
- Gateway/GameServer/Stateless Service 모두 수평 확장 가능
| 모델 | 용도 |
|---|---|
| Sequential | 전역 큐 순차 처리 (GameServer, Gateway) |
| Parallel | ActorId별 병렬 큐 (Stateless Service) |
| Actor | Actor 메일박스 기반 (대규모 동시 엔티티) |
상세: docs/NODE_CONCURRENCY_MODELS.md
- 송신/수신 처리 경로 분리: NetMQ Poller(수신) + Channel<T>(송신)로 상호 블로킹 제거
- Zero-Copy:
StructLayout(Pack=1)+MemoryMarshal.AsRef<T>헤더 직접 읽기 - 메모리 재사용:
ArrayPool<byte>, NetMQMsg.Move()소유권 이전
상세: docs/NETMQ_OPTIMIZATION.md
SimpleNetEngine.Protocol (Tier 0) 패킷 정의, 메모리 유틸리티
SimpleNetEngine.Infrastructure (Tier 1) 분산 시스템 인프라 (Redis, NetMQ)
SimpleNetEngine.Node (Tier 2) Service Mesh 구현
SimpleNetEngine.Gateway (Tier 3) Gateway 라이브러리
SimpleNetEngine.Game (Tier 3) GameServer 라이브러리
Sample/ 실행 가능한 샘플 서버
하위 Tier → 상위 Tier 참조 불가 (단방향 의존성).
DFrame 기반, Worker 3대, Concurrency 600, Total Request 3,000,000
| Worker | Succeed | Error | Avg(ms) | Median(ms) | P90(ms) | P95(ms) | RPS |
|---|---|---|---|---|---|---|---|
| 1 | 1,000,000 | 0 | 31.99 | 20.61 | 43.12 | 53.00 | 18,582 |
| 2 | 1,000,000 | 0 | 28.40 | 23.56 | 46.37 | 71.22 | 20,827 |
| 3 | 1,000,000 | 0 | 32.27 | 19.02 | 40.70 | 55.52 | 18,538 |
| 합계 | 3,000,000 | 0 | - | - | - | - | 57,949 |
# 전체 빌드
dotnet build SimpleNetEngine.sln
# Aspire AppHost로 실행 (Gateway + GameServer + Redis)
dotnet run --project Sample/Sample.AppHost| 문서 | 설명 |
|---|---|
| 아키텍처 개요 | 전체 시스템 구조 |
| 암호화/압축 | 선택적 암호화 설계 |
| 동시성 모델 | Sequential/Parallel/Actor |
| NetMQ 최적화 | Zero-Copy, 성능 튜닝 |