programing/Networks18 [펌] 게임 서버의 구조 출처 : http://www.hanbit.co.kr/network/view.html?bi_id=934 http://www.hanbit.co.kr/network/view.html?bi_id=936 온라인 게임에서 실질적인 게임을 진행시켜주는 것이 게임 서버이다. 우리는 게임서버의 구조는 게임의 진행과 시스템의 효율성에 많은 영향을 미치는 부분이다. 물리적으로 한정적인 시스템 자원을 효율적으로 사용하기 위해서 다양한 분산 처리는 필수적인 요소이다. 분산처리 구조를 익힘으로써 우리는 좀더 세련되고 뛰어난 성능을 발휘할수 있는 게임서버를 만들수 있다. 온라인 게임 서버 프로그래밍의 핵심인 게임 서버의 구조에 대해 알아 보도록 하자. 1. 일반적인 게임 서버 구조 2. 분산 게임 서버 구조 3. 서버간 통신 1... 2015. 6. 2. IOCP(Input Output Completion Port) - Completion Port > IOCP에서는 IO 완료 정보가 Completion Port 오브젝트라는 커널 오브젝트에 등록 > 소켓과 Completion Port 오브젝트와의 연결 요청 -> 소켓을 기반으로 진행되는 IO 완료 상황을 Completion Port 오브젝트에 등록 > 주의 사항 : I/O 작업에 사용할 버퍼가 I/O 작업을 신청한 시점부터 IOCP로부터 완료했다는 메시지를 받기 전까지 변경이 되면 안 된다는 것이다. 따라서, I/O 작업에 사용하는 버퍼는 전역 변수이거나 동적으로 할당된 메모리 공간이어야 한다. 특히 WSASend()나 WriteFile() 작업을 할 때, 함수를 호출하는 시점에 사용했던 공간을 함수가 끝나자 마자 지워버리거나(지역 변수), 다른 값으로 변경하게 되면.. 2015. 6. 2. Overlapped IO 모델 - IO 중첩 > 하나의 쓰레드 내에서 동시에 둘 이상의 영역으로 데이터를 송수신 하여 입출력이 중첩되는 상황 > 호출된 입출력 함수가 바로 반환해야 가능(바로 반환하여 바로 다음 패킷 전송) -> 비동기 IO > 비동기 IO가 가능하려면 호출되는 입출력 함수는 Non-Blocking 모드 > 입출력 뿐만 아니라 입출력의 완료를 확인하며 송수신 - Overlapped IO 소켓 생성 SOCKET WSASocket( int af, // 프로토콜 체계 int type, // 소켓의 데이터 전송 방식 int protocol, // 사용되는 프로토콜 LPWSAPROTOCOL_INFO lpProtocolInfo, // 소켓의 특성정보(WSAPROTOCOL_INFO) 구조체 GROUP g, // 함수 확장을 위해 .. 2015. 6. 1. Asynchronous Notification IO 모델 - 동기(Synchronous) > send()가 호출되는 순간 데이터의 전송이 시작되고 , send() 호출이 완료(반환)되는 순간 데이터 전송이 완료 > recv()가 호출되는 순간 데이터의 수신이 시작되고 , recv() 호출이 완료(반환)되는 순간 데이터 수신이 완료 ( recv()같은 경우 데이터 받을 때 까지 무한 대기 상태이다 ) - 비동기(Asynchronous) > 입출력 함수의 반환시점과 데이터 송수신의 완료시점이 일치하지 않은 경우 - 동기화 입출력 단점 > 입출력이 진행되는 동안 호출된 함수가 반환을 하지 않아서 다른 일을 할 수 없음 > 비동기화가 해결책, 동기 방식의 단점을 극복한 모델 - 비동기 Notification 입출력 모델에 대한 이해 > 입력 버퍼에 데이터가 수신되어서.. 2015. 5. 22. 이전 1 2 3 4 5 다음