HalfNetwork가 버전 업 되었습니다.


아래의 글은 임영기님의 이번에 변경된 것에 대한 설명입니다.

------------------------------------------------------------------------------------

안녕하세요. 임영기 입니다.

HalfNetwork 0.5.1 버젼을 릴리즈 했습니다.
SourceForge.net에 svn, download 모두 올렸습니다.

안정성 향상에 주안점을 둔 Release 입니다.

다운로드
https://sourceforge.net/projects/halfnetwork/

변경사항
http://halfnetwork.springnote.com/pages/2899720


추가로 하나 말씀드리면 NetworkFacade클래스에 PopMessage와 PopAllMessage 함수가 있습니다.
전자는 블럭을 하나 꺼내오는 함수이고 후자는 블럭을 체인(링크드 리스트)으로 구성해서 꺼내오는 함수 입니다.
가능하면 PopAllMessage를 사용하시기를 추천드립니다. 한번에 다 꺼내와서 루프돌면서 처리하기 때문에
Context switching을 줄여서 상당한 성능 향상을 보실수 있습니다.

아래와 같이 처리하시면 됩니다. 예제에는 넣지 못했습니다. 다음 릴리즈에 추가할 예정입니다.

ACE_Message_Block* headBlock = NULL;

    if ( false == NetworkFacadeInstance->PopAllMessage(queue_id, &headBlock, 0))
        return;

    ACE_Message_Block* commandBlock = headBlock;
    do
    {
        MessagePostee postee;
        memcpy(&postee, commandBlock->rd_ptr(), sizeof(MessagePostee));
       commandBlock->rd_ptr(sizeof(MessagePostee));
        ACE_Message_Block* payloadBlock = commandBlock->cont();
        assert(NULL != payloadBlock);

        switch(postee.command)
        {
        case MessageHeader::ESTABLISH:
            _OnConnect(postee.stream_id, payloadBlock->rd_ptr());
            break;
        case MessageHeader::READ:
            _OnRead(postee.stream_id, payloadBlock->rd_ptr(), payloadBlock->length());
            break;
        case MessageHeader::CLOSE:
            _OnClose(postee.stream_id);
            break;
        }

        commandBlock = payloadBlock->cont();

    } while(NULL != commandBlock);

    headBlock->release();

-------------------------------------------------------------------------------------



임영기님의 블로그 http://javawork.egloos.com/

HalfNetwork 스프링노트 http://halfnetwork.springnote.com/

다운로드  http://sourceforge.net/projects/halfnetwork

신고
by 흥배 2009.03.21 13:19
| 1 |

티스토리 툴바