Friday, December 5, 2008

boost::asio - Network Library modified by Terry - 1

boost::asio 를 분석한 후 사용방법이라던지,
코드의 확장이 제대로 된 예제가 전혀 없어서,
내 입맛에 맞게끔 수정을 가해서 쓰고 있다.
매우 간단하지만, 상당히 잘 동작하는 편이여서 마음에 든다.

소스가 다 나열하기에는 조금 길어서 5~6 번 정도에 나누어서 올릴 계획.
첫번째는 기본이 되는 packet structure 정의.

주요 특징:
- boost::asio network library 에서 사용하기 불편한 점을 보완.
- 각 socket 마다 꽤나 큰 read / write buffer 를 들고 있음.
- buffer 구조가 매우 단순하므로 mmo 에 당장 사용하기에는 무리가 있음.
- 현재 잘 동작하고 있지만, buffer 에 문제가 생기면 allocator 를 도입할 에정.
- client 연결이 많고 mmo 처럼 패킷 받은 후에 처리해야할 양이 많은 경우, packet parse 용 thread 를 따로 만들어서 동작시키는 것이 당연함!

- callback 을 boost::function 을 사용해서 좀 세련되게 하고 싶었으나, object 를 넘기는 과정에서 계속 complie error 가 발생.
- 시간관계상 그냥 C style callback 유지. 귀찮아서 다시 function 작업은 안해봤음. :)

structure.h


#include
#include
#include
#include

struct packet_header
{
unsigned short index_;
unsigned short body_length_;

packet_header() : index_(0), body_length_(0) {}
};

struct packet : public packet_header
{
char* data_;

packet() : data_(0) {}
~packet() { if(data_) delete [] data_; }
};

const int header_size = (int)sizeof(packet_header);
const int max_body_size = 1024; // If you need more size, just edit this!!!
const int max_packet_size = header_size + max_body_size;

struct data_buffer
{
boost::array data_;
};

typedef boost::shared_ptr packet_header_ptr;
typedef boost::shared_ptr packet_ptr;
typedef boost::shared_ptr data_buffer_ptr;

No comments:

Post a Comment