본문 바로가기

Game Server

(28)
[C++/게임서버] WSAEventSelect 보호되어 있는 글입니다.
[C++/게임서버] select 모델 지난번 포스트를 통해서 단순히 논블로킹을 적용하고 while문으로 도배를 하는건 굉장히 CPU를 낭비하는 일이라고 소개를 했다. 그렇기 때문에 다양한 입출력 모델을 사용한다고 이야기를 했다. 오늘은 select 모델을 소개하겠다. Select 모델은 select 함수를 기반으로 한 모델이라 이름이 이렇게 명명되었다. 사실 뒤에서 소개할 IOCP 모델하고 비교를 한다면, 서버 입장에서는 사용하기 애매한 물건이다. 하지만 클라이언트 입장에서는 자신만 처리할 필요가 없기 때문에, IOCP같은 고급 기법까지 갈 필요도 없다. 사실 모기 하나 잡겠다고 다연장 로켓포를 날리는 수준이다. 그래서 사실 클라이언트에서 비동기로 쓰기 좋은 모델이라 볼 수 있겠다. 그리고 윈도우/리눅스 둘 다 사용되는 모델이기도 하다. (..
[C++/게임서버] 논블로킹 소켓 사실 지금까지 쓴 소켓은 블로킹 소켓이다. 이에 대한 증거 함수는 다음과 같다. accept : 접속한 클라이언트가 있을 경우 connect : 서버 접속 성공했을 경우 send, sendto : 요청한 데이터를 송신 버퍼에 복사했을 때 recv, recvfrom : 수신 버퍼에 도착한 데이터가 있고, 이를 유저 레벨에 복사했을 때 문제는 이 함수들은 이에 대한 역할을 하기 전까지 계속 멈춰있다는 점이다. 그래서 이를 해결하기 위해서 예로 들어 5000명이 온다고 가정할 때 5000개의 스레드를 만드는 것은 굉장히 좋지 않은 발상이란 것이 느껴진다. 그래서 나온 개념이 논블로킹이다. 사실 이것이 모든 것을 해결해주지 않는다. 암튼 진행해보자면, windows 기준에서 이를 어떻게 만들 것인가? 일단 소켓..
[C++/게임서버] TCP VS UDP 지난 글까지 소켓에 대해 이야기를 했으니, 그럼 이 소켓을 통해서 네트워크 상에서 어떻게 컴퓨터가 데이터를 보낼 것인가에 대해 적어보겠다. 예로 들어 내가 A 아파트 208호에 사는데, B 아파트에 101호에 보낸다고 가정하자. 그럼 택배 배송 회사는 상품에 대해 배송 정책을 정하고, 보내는 최종 주소를 지정한 뒤, 그 최종 경로에 대한 단지 경로를 설정하고, 그 이후 택배 운송을 시작할 것이다. 이는 네트워크 상에서도 마찬가지다. A 스위치와 맞물린 1번째 컴퓨터가 있다고 가정하자. 그럼 데이터를 보낸다면, 스위치를 통해서, 라우터로 간다. 그리고 TCP 계층인 어플리케이션 -> 트랜스포트 -> 네트워크 -> 데이터링크 -> 피지컬 계층을 거쳐 B 스위치에 맞물린 1001번째 컴퓨터로 갈 것이다. 이 ..
[C++/게임서버] 소켓 프로그래밍 개념 결론 : 소켓은 전화기와 같다. 이제 네트워크 프로그래밍의 기초다! 소켓이란 단어를 들어보면 처음에는 감도 안 올 것이다. 아니면 벽에 달려있는 플러그를 꽂기 위한 것이 생각날 것이다. 네트워크 프로그래밍이니 예시로 가자. 회사 건물 내에 외부 식당가가 있다고 가정해보자. 그리고 그 식당가는 한식, 일식, 중식 등등으로 이뤄져있다고 가정하자. 그럼 이 식당가는 직원을 고용할 것이다. 근데 고용을 했다면 이 식당가의 전화번호를 배정받을 것이다. 자 이제 점심시간이 되서 우리 팀원은 이 식당에서 배달이나 예약을 것이다. 그럼 내 전화를 통해서 이 식당가에 대표 전화를 하면 이러한 과정을 해결할 수 있을 것이다. 즉 식당가와 손님의 관점을 정리를 해보자. 먼저 식당가는 다음과 같은 과정을 거칠 것이다. 안내원..
[게임서버/C++] STL Memory Allocation 보호되어 있는 글입니다.
[게임서버/C++] Stomp Allocation 보호되어 있는 글입니다.
[게임서버/C++] Base Memory Allocating 보호되어 있는 글입니다.