1 完美的封装
开发网络应用,最基本的事情就是就是先封装好网络模型和数据传输接口,在boost中,这两件事情都由asio做了,而且做得足够好,无论在window或linux下,诸如重叠IO,IOCP和epoll,select这些几乎所有网络模型都已经被封装在asio::io_service中,而socket的连接,读写也被非常方便的包装在tcp udp的类中,似乎我们已无事可干,或者,我们在此基础上可以包装出更方便,更通用的的代码,如针对asio中tcp和udp接口,可以通过模板,包装成与协议无关的数据传输接口。
2 基本IO传输接口封装,支持tcp及udp
///S: asio::ip::tcp::socket or udp socket. is_udp: is udp
template<typename S, bool is_udp>
class network_io
{
public:
network_io(S& _S):_socket(_S),_stop(0)
{
}
~network_io()
{
}
void asyncWrite(void* buffer,size_t size, boost::function<void(bool,size_t)> func)
{
return asio::async_write(_socket,asio::const_buffers_1(buffer,size),
boost::bind(&network_io::onIO,this,func,asio::placeholders::error,asio::placeholders::bytes_transferred);
}
void asyncRead(void* buff