개인공부/Rookiss 게임 서버13 Chapter 3 - 네트워크 프로그래밍 (2) TCP 서버 실습 클라이언트에서 데이터 송신 - 서버에서 수신 - 수신한 데이터를 다시 클라이언트에 송신 - 클라이언트에서 수신 // DummyClient.cpp int main { // socket() -> connect() ... ... // ---------------- // 연결 성공! 데이터 송수신 가능 cout 2023. 3. 29. Chapter 3 - 네트워크 프로그래밍 (1) 소켓 프로그래밍 기초 #1 손님 : 핸드폰 준비 - 식당 번호로 문의 - 대리인을 통해 식당 측과 대화 가능 손님 = 클라이언트 핸드폰 = 소켓 식당 번호 = 서버 주소 소켓을 통해 서버와 패킷 송수신 가능 식당 : 안내원 고용 - 안내원 교육(대표 번호 배정) - 영업 시작 - 대리인에 안내 식당 = 서버 안내원 = Listener 소켓 안내원 교육 = Bind(서버주소/포트를 소켓에 연동) 영업 시작 = Listen 안내 = Accept(별도의 소켓에 연결) 클라이언트 세션을 통해 통신 가능 소켓 프로그래밍 기초 #2 // DummyClient.cpp #include #include #include #pragma comment(lib, "ws2_32.lib") int main() { // winsoc.. 2023. 3. 29. Chapter 2 - 메모리 관리 (4) Object Pool 기존 메모리 풀은 비슷한 크기의 메모리들을 같은 메모리 풀에 넣어 공용으로 사용함 이 때 메모리가 오염된 경우 원인을 찾기 힘들다는 단점이 존재 따라서 동일한 크기가 아닌 동일한 클래스끼리 묶어서 관리하는 오브젝트 풀을 사용할 수 있음 // ObjectPool.h #include "Types.h" #include "MemoryPool.h" template class ObjectPool { public: template static Type* Pop(Args&&... args) { #ifdef _STOMP MemoryHeader* ptr = reinterpret_cast(StompAllocator::Alloc(s_allocSize)); Type* memory = static_cast(.. 2023. 3. 29. Chapter 2 - 메모리 관리 (3) Memory Pool #1 메모리 풀링 : 메모리의 재사용 개념, 미리 메모리를 할당해 놓은 뒤 확보된 공간을 제공/회수 메모리 해제, 할당 반복시 컨텍스트 스위칭이 일어나기 때문에 자원의 낭비가 발생 메모리 해제, 할당 반복시 메모리 파편화가 발생할 수 있음 이를 메모리 풀링을 통해 방지할 수 있으나, 최근의 할당기는 성능이 뛰어나기 때문에 선택의 영역이 됨 // MemoryPool.h /*----------------- MemoryHeader ------------------*/ // 할당된 객체의 정보가 담긴 구조체, 데이터 앞에 들어감 // [MemoryHeader][Data] struct MemoryHeader { MemoryHeader(int32 size) : allocSize(size) {}.. 2023. 3. 29. 이전 1 2 3 4 다음