반응형

게임 개발/게임 서버 프로그래밍 5

RPG 게임 이동 동기화 스트레스 테스트 봇

게임 서버 개발 초기에 오브젝트 관리 구조 개발을 위해 만들었던 툴이 보여 포스팅 합니다. 동영상과 같은 툴을 개발하여 최적의 성능을 내는 구조가 어떠한 구조인지를 테스트 하기 위해 만들었던 봇입니다. - Grid 사이즈 - 브로드캐스트할 Grid 수 - 오브젝트 관리 자료 구조 - 쓰레드 수 - 락 방식 vs 락 프리 방식 이러한 봇을 하나 잘 만들어 놓고 위와 같은 것들의 성능을 비교 분석하는 툴로 이용 하였습니다.

TCP 3/4 Way-handshake

3 way-handshake (TCP 접속) 1단계 SYNchronize : TCP 접속 요청 2단계 SYN, ACKnowledge : 응답 및 요청 3단계 ACK : 2단계 SYN에 대한 응답 4 way-handshake(TCP 연결 해제) 1단계 FIN : TCP 연결 해제 요청 2단계 ACK : 서버는 확인 메시지 보내고 통신이 끝날때 까지 3단계 FIN : 서버가 통신이 끝나면 연결이 종료되었다고 클라이언트에게 FIN 전송 4단계 ACK : 확인 메시지 전송 해제는 어느 쪽에서든 먼저 할 수 있습니다. client, server 상관 없이 동일합니다. 가장 중요히 알아야 할 것은 먼저 close한 쪽에 TIME_WAIT 상태가 오래 지속 된다는 것입니다. close를 먼저 요청한 쪽에 최종적으로 ..

Overlapped IO, IOCP

Overlapped IO WSASend, WSARecv, GetQueuedCompletionStatus 함수의 인자에 모두 Overlapped 구조체가 넘어 온다. 왜 필요한가? 넌블러킹, 비동기 IO를 처리가기 위한 IO 방법이다. 여러 IO가 중첩 되게 처리 한다고 해서 Overlapped라는 이름을 붙였다. 또 다른 의미로는 작업과 IO가 동시에 진행된다는 의미 장점 넌블럭 IO 버퍼핑 오버 헤드 감소 : OS에 의해사용자가 지정한 버퍼에다 바로 read/write 한다. IOCP(IO Completion Port) 재사용이 가능한 쓰레드 풀 유지 스마트한 워크 쓰레드 관리 커널의 IO 쓰레드에 제어를 위임하여 IO 완료를 통보 받아 생성한 워커 쓰레드에서 로직 처리 즉, 사용자는 IO Comple..

C++ 프로그래머가 알아야할 C# 기능 요약

C++만 개발하다가 C#으로 서버 개발을 해야지하고 마음을 먹은 다음 C# 기본서를 읽으면서 특별히 기억했으면 해서 그록해 두었던 내용들이네요. 요즘은 첫 언어로 C++보다는 C#을 먼저 접하는 분들이 많지만 예전에는 C#은 더더욱 젋은 언어였었네요. 값 타입 & 참조 타입 값 타입: 선언과 동시에 메모리 할당 byte, char, int, long, float, double, decimal, bool, struct, enum 참조 타입 : 선언 후 메모리를 직접 할당 참조 변수로 함수 인자 전달(ref, out) ref : 반드시 초화 하고 전달. out : 초기화 필요 없다. void func(ref int x) void func(out int x) C#에서 포인터 사용(unsafe 코드) 컴파일 옵..

네비게이션 메쉬 + A* (Navigation Mesh + AStar)

2004년 MMORPG 게임 서버 개발시에 정리 했던 내용이네요. 추억이 새록 새록~ 지금은 너무 당연하고 공개된 자료도 많지만, 그 때는 정보 하나 하나가 너무 소중하고 덕분에 삽질 많이 했었지요. 네비게이션 메쉬 + A* (Navigation Mesh + AStar) : 3차원 지형을 2D처럼 간단하게 표현 하는 방식으로 Object가 이동 가능한 모든 지형을 Cell(삼각형)으로 표시 하여 A*와 같은 길찾기 알고리즘을 쉽게 적용 할 수 있게 해 줍니다. [Navigation Mesh] 1. NaviCell 만들기 Cell 이란? vetex 세개로 구성되어 이루어 진 하나의 삼각형입니다. - 삼각형의 사이드 라인 세개를 만듭니다. - 평면 방정식을 위한 Plane을 생성 합니다. - Cell의 중점..

반응형