728x90 반응형 게임서버7 게임서버) 11. IOCP Core IOCP Core 이제 IOCP모델을 서버코어에 넘겨주어야 하기 떄문에 세분화 하여 정리할 필요가 있다. IOCP의 핵심 요약 CreateIocompletionport를 사용하여 (초기화된)CP큐를 생성한다. CP에 연결할 객체(Object)를 생성한다. CreateIocompletionport를 이용하여 생성한 객체를 CP에 등록한다(관찰대상 등록) WSARecv를 사용하여 WorkerThread에게 전송을 맡긴다(이때 WorkerThread에서 마지막에 WSARecv를 호출해야된다) IOCP Core IOCP모델의 CP큐를 담당하는 클래스이다. //IOCPCore.h class IocpObject : public enable_shared_from_this { public: virtual HANDLE .. 게임서버 2023. 1. 17. 게임서버) 8. Select모델 select 모델 select모델은 소켓함수 호출을 미리 알 수 있다면 블로킹/논블로킹에서 했던 불필요한 것을 하지 않아도 된다는 것이다. select모델 순서 0.소켓 셋 초기화 1.ListenSocket(관찰 대상) 등록(읽기,쓰기,예외 설정) 2.세션 소켓 등록 3.Select 옵션 설정(관찰 시작 하나 이상의 소켓이 준비되면 리턴->나머지는 알아서 제거됨(readSet,writeSet,exceptSet)) 4.남은 소켓 체크해서 진행 Select모델 생성 0.소켓 셋 초기화 및 세션생성 먼저 세션과 fd_set을 생성해준다. struct Session //클라이언트의 정보를 서버로 가져오는 역할 { SOCKET socket=INVALID_SOCKET; char recvBuffer[1000]={};.. 게임서버 2023. 1. 13. 게임서버) 7. 논블로킹 소켓 논블로킹 소켓 소켓 관련 시스템 콜에 대하여 네트워크 시스템이 즉시 처리할 수 없는 경우라도 시스템콜이 바로 리턴되어 응용 프로그램이 block되지 않게 하는 소켓 모드이다. 싱글게임이 아닌 온라인 게임과 같이 통신 상대가 여럿이거나 여러가지 작업을 병행하려면 nonblocking 또는 비동기 모드를 사용해야 한다. ioctlsocket function (winsock.h) - Win32 apps The ioctlsocket function (winsock.h) controls the I/O mode of a socket. learn.microsoft.com 서버 논블로킹 소켓 생성 논블로킹 소켓은 블로킹소켓을 생성했을때와 동일한 순서로 생성하되, 바인딩전에 아래와 같은 코드를 설정해주어야 한다. u_l.. 게임서버 2023. 1. 12. 게임서버) 6. 소켓프로그래밍 소켓프로그래밍 //TODO 서버 소켓프로그래밍 순서 0.소켓초기화 1.새로운 소켓 생성 2.소켓에 주소/포트 번호 바인딩 3.Listen설정 4.Accept설정 5.통신 //필요한 헤더파일 #include #include #include // 게임서버 2023. 1. 11. 게임서버) 3.멀티쓰레드 공유자원 멀티 쓰레드 공유자원 공유 자원은 여러 프로세스가 공동으로 이용하는 변수, 메모리, 파일 등을 말한다. 공유 자원은 공동으로 이용되기 때문에 누가 어떻게 데이터를 읽거나 쓰느냐에 따라 결과가 달라질 수 있다. 이러한 공유자원을 이해하기 위해서는 일단 메모리의 구조를 이해해야된다. 메모리구조 메모리는 총 4가지 구간으로 나눌수 있는데, 각각의 영역은 다음과 같은 역할을 수행한다. -코드영역: 코드영역은 실행할 프로그램의 코드가 저장되는 영역으로 텍스트영역이라고도 부른다.CPU는 코드 영역에 저장된 명령어를 하나씩 가져가서 처리하게 되며, 공유하더라도 문제가 되지않는다. 단, 우리가 적은 코드 순서대로 실행되는 것이 아닌 CPU파이프라인에 영향을 받아 순서가 다소 다를수 있다. -스택 영역:스택영역은 함수의.. 게임서버 2023. 1. 6. 게임서버) 2. 멀티쓰레드 멀티쓰레드 //TODO 쓰레드 생성 쓰레드는 다음과 같이 생성이 가능하다. #include std::thread t(실행할 함수); 이런식으로 쓰레드를 생성하고 사용할수 있지만 문제가 발생할 수 있다. 예를 들어 자식 스레드가 아직 실행 중인데 부모 스레드가 종료한되는 경우이다. 기본적으로 메인 스레드가 종료되고도 자식 스레드가 계속 실행 중인 것은 비정상적인 상황으로 본다. 때문에 이 경우, 강제로 오류를 발생시킨다. 이러한 경우를 위해 join() 이라는 함수를 통해 해결할수 있다. 만약 자식쓰레드가 join을 호출하게 되면 부모 스레드는 자식쓰레드가 실행이 끝날 때까지 멈추게 된다. 자식쓰레드의 실행이 끝나면 다시 실행을 재개한다. t.join(); vector를 이용한 다중쓰레드 생성 void T.. 게임서버 2023. 1. 6. 게임서버) 1. 서버개론 서버 온라인 게임에서 서버는 매우 중요한 역할을 한다. 게임에 서버가 연결 되었나 되지 않았나에 따라 싱글게임과 온라인 게임으로 나뉘게 된다. 그렇다면 이러한 서버는 무엇인가? 서버는 다른 컴퓨터에 연결할수 있도록 상시 대기중인 프로그램을 말한다. 서버의 종류 게임에서는 보편적으로 WebServer와 GameServer 두가지의 서버가 존재한다. 이러한 서버는 다음과 같은 특징을 갖는다. WebServer(HTTP Server) -드물게 정보를 요청/갱신을 할 경우 사용 -실시간 상호작용이 필요치 않을 경우 사용 -데이터만을 저장하는 용도로 사용할 경우 사용 - 서버쪽에서 먼저 접근하여 클라이언트에게 요청이 불가능(StateLess서버) -반대로 클라이언트에서 서버에게 요청하여 그에 따른 응답을 해주는 .. 게임서버 2023. 1. 6. 이전 1 다음 728x90 반응형