목록게임프로그래밍/서버 책 (13)
bdfgdfg
Log Class - 온라인 게임 서버에서 로그가 차지하는 중요성은 매우 높다. - 온라인 게임 서버에서 로그는 현재 상태를 사용자에게 정확하고 자세하게 알려줄 수 있는 유일한 도구. -> 로그를 정확하게, 필요할 때 남기지 못한다면 서버가 제대로 동작하는지 문제가 없는지에 대한 파악이 어렵다. - Log클래스는 로그의 종류를 알림과 에러로 나눔으로써 자신이 원하는 정보를 보다 빠르게 찾게 한다. -> 중요도에 따라서 LOW, NORMAL, HIGH, CRITICAL 등 모두 4가지 등급을 두어 쉽게 정보의 중요성을 파악. - 로그를 남기는 것은 중요하지만 꼭 필요한 것들을 로그로 남기는 게 좋다. -> 1. 로그가 어떤 함수에서 남겨졌는지 알아야 한다. -> 2. 누구에 의해서 로그가 남겨졌는지를 알아..
Queue Class - 큐 자료구조는 온라인 게임 서버에서 자주 쓰이는 자료구조. - Queue Class도 기본적으로 큐 알고리즘을 바탕으로 Monitor클래스를 상속받아 둘 이상의 쓰레드들이 동시에 접근하지 못하도록 보호. 딱히 어려운게 없으므로 바로 소스코드. #pragma once #include "Monitor.h" template class Queue : public Monitor { public: Queue(int MaxSize = MAX_QUEUESIZE); ~Queue(); public: // 큐에 데이터 삽입 bool PushQueue(T queueItem); // 큐의 크기 감소 void PopQueue(); // 큐가 비었는지 확인 bool IsEmpty(); //데이터 가져오기 ..
Thread Class - Thread 클래스는 사용자가 쉽게 틱(Tick) 쓰레드를 관리하기 위해 만든다. - 틱 쓰레드는 정해진 시간마다 특정 연산을 하기 원할 때 쓰이는데 온라인 게임 서버에서는 꼭 필요한 기능. -> 일반적으로 좀비상태의 클라이언트의 연결처리를 할때 많이 쓰인다고 한다. -> 좀비상태는 사용자가 연결만 있고 아무것도 하지 않는 상태를 의미. -> 이 상태는 클라이언트와 서버간의 연결 상태가 좋지않거나, 특정 사용자가 악의적인 목적으로 이런 상태를 만들 수 있다. -> 그래서 보통 클라이언트에서는 일정 시간마다 패킷을 보내고 서버에서는 일정 시간안에 그 패킷이 도착하지 않으면 클라이언트와의 연결을 끊어버린다. (좀비상태 방지 가능) - 틱 쓰레드는 위의 역할뿐만 아니라 온라인 게임 ..
RingBuffer 클래스 - 이 클래스는 메모리 풀(Memory Pool)개념이 적용된 버퍼 공간으로 주된 사용 목적은 연결에 대한 패킷을 보내거나 받을 때 사용한다. - 메모리 풀링(Memory Pooling)은 미리 사용할 메모리를 할당해 놓고 필요할때마다 꺼내서 쓰는 방식. -> 쓰레드 풀과 같은 개념. 미리 쓰레드를 할당해놓고 필요할때마다 꺼내 사용하는 방식 (매번 할당/소멸의 형태x) -> 위와 마찬가지로 메모리를 매번 할당하고 해제하는 작업이 생각보다 CPU소모가 있다. -> 더 큰 이유로는 반복적으로 메모리를 할당하고 해제하면 메모리 단편화가 생길 수 있기 때문. -> 메모리 단편화는 메모리가 조각나는 현상. 심해지면 메모리를 할당하는데 오랜 시간이 걸리며 (OS가 메모리를 할 당할 공간을..