bas_0_40_0

所属分类:系统/网络安全
开发工具:C/C++
文件大小:55KB
下载次数:28
上传日期:2011-06-17 08:55:16
上 传 者adylee
说明:  boost asio 机制 半同步半异步 服务器
(boost asio half sync/half async)

文件列表:
examples\bas_demo.sln (4001, 2009-11-20)
examples\echo\client\client_work.hpp (2425, 2009-07-22)
examples\echo\client\client_work_allocator.hpp (827, 2009-03-18)
examples\echo\client\connections.hpp (2643, 2009-07-22)
examples\echo\client\main_client.cpp (2342, 2009-06-24)
examples\echo\echo_client.vcproj (4410, 2009-11-20)
examples\echo\echo_server.vcproj (4470, 2009-11-20)
examples\echo\server\posix_main_server.cpp (3128, 2009-06-24)
examples\echo\server\server_work.hpp (2476, 2009-07-22)
examples\echo\server\server_work_allocator.hpp (827, 2009-03-18)
examples\echo\server\win_main_server.cpp (2902, 2009-06-24)
examples\http\http_server.vcproj (5139, 2009-11-20)
examples\http\server\header.hpp (557, 2009-03-03)
examples\http\server\mime_types.cpp (955, 2009-03-03)
examples\http\server\mime_types.hpp (673, 2009-03-03)
examples\http\server\posix_main_server.cpp (3068, 2009-06-24)
examples\http\server\reply.cpp (7667, 2009-03-09)
examples\http\server\reply.hpp (1647, 2009-03-05)
examples\http\server\request.hpp (908, 2009-03-09)
examples\http\server\request_handler.cpp (3076, 2009-03-03)
examples\http\server\request_handler.hpp (1208, 2009-03-03)
examples\http\server\request_parser.cpp (6737, 2009-03-03)
examples\http\server\request_parser.hpp (2499, 2009-03-03)
examples\http\server\server_work.hpp (3121, 2009-07-22)
examples\http\server\server_work_allocator.hpp (1073, 2009-03-18)
examples\http\server\win_main_server.cpp (2842, 2009-06-24)
examples\proxy\proxy_server.vcproj (4561, 2009-11-20)
examples\proxy\server\client_work.hpp (2933, 2009-11-20)
examples\proxy\server\client_work_allocator.hpp (832, 2009-03-18)
examples\proxy\server\posix_main.cpp (3743, 2009-06-24)
examples\proxy\server\server_work.hpp (3187, 2009-11-20)
examples\proxy\server\server_work_allocator.hpp (1359, 2009-06-24)
examples\proxy\server\win_main.cpp (3517, 2009-06-24)
examples\ssl\client\main_client.cpp (2459, 2009-06-24)
examples\ssl\client\ssl_client_work.hpp (2704, 2009-07-22)
examples\ssl\client\ssl_client_work_allocator.hpp (1339, 2009-03-18)
examples\ssl\client\ssl_connections.hpp (2461, 2009-06-24)
examples\ssl\server\posix_main_server.cpp (3315, 2009-06-24)
examples\ssl\server\ssl_server_work.hpp (2665, 2009-07-22)
examples\ssl\server\ssl_server_work_allocator.hpp (1778, 2009-03-18)
... ...

一、bas简介 bas为boost_asio_server(baserver)的简称,是采用Half-Sync/Half-Async模式的服务器框架,使用c++实现,能够大大简化tcp server的开发工作。 bas目前实现了以下功能: 1、底层基于boost及asio实现,支持ssl,跨越多种操作系统平台; 2、I/O部分使用非阻塞异步处理机制,业务逻辑处理部分采用同步线程池,便于更好的利用多处理器资源; 3、封装处理各种I/O操作及状态,采用无共享锁/无引用计数设计,控制逻辑清晰、简单,用户应用程序无须关心I/O操作细节,只需要关心业务逻辑的具体实现; 4、提供多级tcp server访问处理机制,非常容易实现各种***服务器; 5、提供echo_server/echo_client、ssl_server/ssl_client、proxy_server、http_server(基于asio的http server示例)等示例供参考。 二、bas简单说明 bas代码中包含了详细的注解(英文,但不一定准确,请谅解),几个示例程序演示了基本的用法,这里主要将两个模板参数的具体实现要求说明如下: 1、由Work_Allocator类负责新建Work_Handler类实例,必须实现如下函数: make_handler: 新建一个Work_Handler类实例; make_socket: 新建一个tcp::socket或ssl::stream类实例,看起来是比较奇怪的设计,不过为了适用于创建ssl::stream类,必须从Work_Allocator类中获得context参数; 2、Work_Handler类负责执行业务逻辑,必须实现如下函数: on_set_parent: 设置父连接指针时被调用,参数为负责I/O操作的service_handler对象和父连接指针; on_set_child: 设置子连接指针时被调用,参数为负责I/O操作的service_handler对象和子连接指针; on_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错误请参见的定义; on_parent: 从父连接接收到事件时被调用,参数为负责I/O操作的service_handler对象和事件内容; on_child: 从子连接接收到事件时被调用,参数为负责I/O操作的service_handler对象和事件内容; 在上述函数中,可通过调用service_handler对象的async_read_some、async_read、async_write等函数实现I/O操作,需要主动关闭连接时调用close即可。具体用法请参考示例; 三、版本历史 1、0.30.0,初始公开发布版本; 2、0.30.5,进一步完善接口,主要改变包括: *将模板函数的clear()改为与其它函数类似的on_clear(); *直接使用endpoint连接host,相应修改了对应函数的port参数类型; *增加connect接口,允许用作***时临时指定连接host; 3、0.30.6,on_write接口调整为与on_read类似,增加成功写数据长度参数; 4、0.31.0,调整父/子连接的实现方式,由应用程序负责管理父、子连接之间的所有动作。 四、其他说明 为了实现无锁设计,所有I/O操作及业务操作任务分别被分派到不同但固定的线程执行。如果业务处理任务负载非常小,将会发生不必要的额外线程切换。但是考虑到逻辑清晰而简单的需要(不是有个说法叫做科学就是追求简单嘛),且实际的用户应用程序的业务处理任务负载应该比较繁重,所以最终保留了现有的设计。 五、版权声明 本软件的版权由Xu Ye Jun(moore.xu@gmail.com)所有,基于Boost Software License(Version 1.0)发布,具体规则参见内附的LICENSE_1_0.txt的内容(复制自http://www.boost.org/LICENSE_1_0.txt)。

近期下载者

相关文件


收藏者