bas的概略说明

bas的设计思路是基于开源、成熟、稳定、跨平台的网络异步io库的基础上,搭建一个比较傻瓜式、比较健壮、实现主要tcp server服务器功能的框架式平台,用户只需要实现处理具体work的模板参数类即可。

 

bas代码中包含了详细的注解(英文,但不一定准确,请谅解),示例程序也演示了基本的用法,这里主要将两个模板参数类的具体实现要求说明如下:

1、由Work_Allocator类负责新建Work_Handler类实例,必须实现如下函数:

   make_handler: 新建一个Work_Handler类实例;

   make_socket:  新建一个tcp::socket或ssl::stream类实例,看起来是比较奇怪的设计,不过为了适用于创建ssl::stream类,必须从Work_Allocator类中获得context参数;

 

2、Work_Handler类负责执行业务逻辑,必须实现如下函数:

   clear:     连接开始前被调用,目的是将所有内部变量清除为初始状态;

   on_open:   当连接建立成功后将首先被调用,参数为负责I/O操作的service_handler对象;

   on_read:   当读操作正常完成后被调用,参数为负责I/O操作的service_handler对象和成功读取数据长度;

   on_write:  当写操作正常完成后被调用,参数为负责I/O操作的service_handler对象;

   on_close:  当连接关闭时被调用,参数为负责I/O操作的service_handler对象和错误原因,错误原因主要包括:

                  0, 操作成功完成,连接正常关闭;

                  boost::asio::error::eof, 操作成功完成,连接被对端干净的关闭;

                  boost::asio::error::timed_out,操作超时未完成;

                  其他类型的I/O错误请参见<boost/asio/error.hpp>的定义;

   on_parent: 从父连接接收到事件时被调用,参数为负责I/O操作的service_handler对象和事件内容;

   on_child:  从子连接接收到事件时被调用,参数为负责I/O操作的service_handler对象和事件内容;

   在上述函数中,可通过调用service_handler对象的async_read_some、async_read、async_write等函数实现I/O操作,需要主动关闭连接时调用close即可。具体用法请参考示例;

 

另外,为了实现无锁设计,所有I/O操作及业务操作任务分别被分派到不同但固定的线程执行。如果业务处理任务负载非常小,将会发生不必要的额外线程切换。但是考虑到逻辑清晰而简单的需要(correct is better than fast, simple is better than complex, clear is better than cute, safe is better than insecure.-- Sutter and Alexandrescu, C++ Coding Standards),且实际的用户应用程序的业务处理任务负载应该比较繁重,所以最终保留了现有的设计。

 

项目地址:http://code.google.com/p/baserver/

源码地址:http://code.google.com/p/baserver/source/browse/#svn/trunk

下载地址:http://code.google.com/p/baserver/downloads/list

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值