본문 바로가기

프로그래밍

(38)
패킷과 함수의 1:1 맵핑~ EncoreNet의 RMI가 IDL을 사용해 코드를 만들어 준다는 jacking님 말씀에.. IDL을 찾아 보았습니다. 윈도우에서 COM을 사용해 보지 않은 저로서는 상당히 어려워 보이더군요.. 초보자도 바로 사용하기에는 어려워 보였습니다^^; 그래서 제 나름대로 맵핑시키는 구조를 만들어 보기 위해, CoSingleInvoke() 라는 놈을 만들어 나름대로 최적화를 (어제 올린 부분의 오버헤드가 많아 asm으로 새로 만들었죠~) 해서 구조를 만들어 보려 하고 있습니다. 제가 원하는 스타일은 class Player: public wsaio::handler, public relevant::actor { public: // 자동 생성 필요 // INTERFACE { // BOOL PACKET_MOVE( Pla..
EncoreNet이라는 네트워크 프레임워크의 RMI??... GPGStudy를 통해 최근 배현직(imays)님이 만드신 EncoreNet이라는 네트워크 엔진을 보았습니다. 엔진에 대한 설명을 보면서, 게임에 상당히 최적화 되어 있다는 느낌을 받았습니다. 그 중에 RMI(Remote Method Invocation)라는 기능을 보았습니다. 함수 개발에 있어 상당히 매력적으로 보였습니다. Remote Method Invocation의 약자입니다. 일반적인 네트워크 프로그래밍에서, 메시지 타입, 메시지 헤더 구조체, 송신 함수, 수신 처리 함수를 개발자가 직접 만드는 것이 일반적인데, RMI를 이용할 경우 메시지에 들어갈 내용물을 함수 선언처럼 작성하기만 하면 메시지 타입부터 송수신 처리 루틴까지 모두 컴파일러에 의해 자동 생성됩니다. 또한 EncoreNet™의 RMI..
요즘 개발에서 사용하는 소켓 처리 모델~ 여러가지 방식의 네트워크 처리 모델을 사용해 봤습니다. 구현 하는 네트워크 엔진에 따라 틀리겠지만, IOCP모델은 지금의 방식이 최선이라 생각됩니다. 대부분 이러한 방식의 구현 방식을 사용하시리라 생각됩니다. Adapter IOCP로 할당되어 지는 모든 소켓을 관리 - 리소스관리자 Acceptor AcceptEx()기반의 소켓 listener Connector ConnectEx()기반의 연결 handler Handler 소켓과 1:1 대응되는 이벤트 핸들러 - Cache Filter : 데이터 유형에 따라, Overlap되는 cache buffer - Event : 이벤트 발생 처리를 위한 handler 실제 구현할때도 상당히 깔끔해 지는 장점이 있네요... 여러분 들의 개발 모델은 어떠세요? 참고로, ..
[C++] STL을 사용한 linked map 구현~ 최근 LRU Cache 구현을 위해 STL을 사용한 template 기반의 class를 찾았습니다~ (예전 같으면 그냥 구현을 했을텐데.. 이것도 귀찮아 지네요^^) 필요하신 분들이 있을것 같아 올립니다~ #include #include #include template > struct linked_map { typedef KeyType key_type; typedef MappedType mapped_type; typedef std::pair value_type; private: typedef std::list< ..
새로운 스크립터~ Squirrel.. GPGStudy에 들렀다가.. 괜찮은 스크립터 봤습니다.. 버젼이 2.2라는군요.. 그런데.. 느낌 괜찮습니다... 언제 시간내서 분석해 봐야 겠어요.. lua 와 아주 많이 비슷합니다.. ㅋㅋ Open Source zlib/libpng license dynamic typing delegation classes & inheritance higher order functions generators cooperative threads(coroutines) tail recursion exception handling automatic memory management (CPU bursts free; mixed approach ref counting/GC) weak references both compiler a..
C/C++의 anonymouse structures... 다소 생소하게 느끼는 개발자도 있으리라 본다. 일반적인 방식으로 구조체(struct)를 정의하는 개발자라면 더 그럴것이다. IOCP개발중 가장 많이 사용하는 구조체 중의 하나가 OVERLAPPED라는 구조체이다. - 이 구조체를 보면 이상하게 보이는 정의가 있다. typedef struct _OVERLAPPED { ULONG_PTR Internal; ULONG_PTR InternalHigh; union { struct { DWORD Offset; DWORD OffsetHigh; }; PVOID Pointer; }; HANDLE hEvent; } OVERLAPPED, *LPOVERLAPPED; 참으로 난감하지 않는가? 어떤 개발자는 알것이고 어떤 개발자는 컴파일이 되느냐 의심가는 개발자도 있을줄로 안다. ..
IOCP의 ConnectEx 모델... IOCP의 AcceptEx() 다음으로, ConnectEx() 모델이 있다. 이 모델 또한, AcceptEx() 와 마찬가지로 비동기로 처리할수 있는 함수로 connect()시 non-block상태로 처리할수 있는 장점이 있다. WSAConnect()대신 굳이 ConnectEx()모델이 필요한 이유는 서버의 프로세싱 과정의 block을 제거해 서버의 처리를 지속하기 위해서 이다. -- 별도의 쓰레드를 사용해 connect() 를 할수 있지만 이 방식 보다는 좀더 유용할듯 하다. 그럼, 설명을 해보겠다. 1. ConnectEx 함수 포인터를 얻을 필요가 있다. AcceptEx()는 별도의 함수 포인터를 얻지 않아도 바로 접근 처리할수 있지만, ConnectEx()는 얻어서 처리하였다. 함수의 정의에 문제가..
IOCP의 AcceptEx 모델~ IOCP에는 기본적인 accept() 또는 connect()의 확장 모델이 있다. 이 모델은 비동기 형태의 처리를 하게 하여, IOCP의 사용시 일관된 처리를 유지할수 있게 만들어 준다. -- 굳이 확장함수가 아니라도 WSAAccept()와 같은 함수만 사용해서도 구현이 가능하다. 여기에서는 IOCP에 어떻게 AcceptEx() 함수를 적용시키는지 정리해보고자 한다. 1. AcceptEx()함수를 사용하기 위해 #pragma comment(lib,"ws2_32.lib") #pragma comment(lib,"mswsock.lib") // AcceptEx() 가 추가되어야 한다. 이 명령은 자동적으로 라이브러리를 링크하도록 하는 명령으로, AcceptEx() 함수는 winsock 라이브러리가 아닌 ms w..