st_asio_wrapper:基于Boost.ASIO的高效C/S框架

需积分: 10 9 下载量 164 浏览量 更新于2024-07-19 收藏 384KB DOCX 举报
"st_asio_wrapper是一个C/S网络编程框架,基于Boost.Asio的封装,旨在简化和加速跨平台的客户端/服务器系统构建。它具备高效、异步、跨平台等特性,并提供了自动重连、数据透明传输、分包粘包问题解决等功能。支持SSL、TCP和UDP协议,同时允许在运行时更换打包解包器。框架的核心组件包括用于不同任务的类,如定时器、套接字类和IO服务泵等。" st_asio_wrapper是为了解决C++网络编程中的一些复杂性和繁琐工作而设计的工具。它建立在Boost.Asio库之上,一个强大的、跨平台的异步I/O库。Boost.Asio提供了基础的网络通信功能,如TCP和UDP套接字的处理,而st_asio_wrapper则进一步封装了这些功能,使其更易于使用,尤其适合快速构建C/S架构的系统。 框架的主要特点包括: 1. **高性能**:由于其依赖于Boost.Asio,st_asio_wrapper保持了高效的网络通信性能。 2. **跨平台兼容性**:支持多种编译器和操作系统,如GCC、Clang和Visual Studio。 3. **完全异步操作**:所有网络操作都是异步的,允许多个并发连接和处理,提高系统的并行处理能力。 4. **自动重连**:在网络中断后,能够自动尝试重新连接,增强了系统的健壮性。 5. **数据透明传输**:内置的打包和解包机制自动处理数据分包和粘包问题,简化了用户端的数据处理逻辑。 6. **内部缓存支持**:对于提高数据处理效率,内部提供了缓存机制。 7. **动态打包解包器**:运行时可以更换打包解包器,适应不同的数据编码需求。 8. **SSL支持**:提供安全的加密通信,保障数据传输的安全性。 9. **协议支持**:目前仅支持TCP和UDP两种网络协议。 框架的组件结构如下: - **st_asio_wrapper.h**:包含了编译器版本检测、更新日志等通用信息。 - **st_asio_wrapper_base.h**:定义了一些接口、全局类、函数、宏和日志输出功能。 - **st_asio_wrapper_timer.h**(class st_timer):定义了定时器类,用于设置超时或周期性的任务。 - **st_asio_wrapper_socket.h**(class st_socket):是st_tcp_socket和st_udp_socket的基类,处理消息的调度。 - **st_asio_wrapper_tcp_socket.h**(class st_tcp_socket_base):实现了TCP套接字类,处理TCP数据的接收和发送。 - **st_asio_wrapper_udp_socket.h**(class st_udp_socket_base):实现了UDP套接字类,处理UDP数据的接收和发送。 - **st_asio_wrapper_service_pump.h**(class st_service_pump):封装了Asio的IO_service,管理所有st_asio_wrapper的服务对象,如服务器和客户端。 利用st_asio_wrapper,开发者可以专注于业务逻辑,而不必过于关注底层网络通信的细节。这极大地提高了开发效率,使得网络应用的构建变得更加简单。
2012-10-07 上传
st_asio_wrapper是一组类库,功能是对boost.asio的包装(调试环境:boost-1.51.0),目的是简化boost.asio开发; 其特点是效率高、跨平台、完全异步(当然这是从boost.asio继承而来)、自动重连,数据透明传输,自动解决分包粘包问题(你可以像udp一样使用它); 注:只支持tcp协议; 教程:http://blog.csdn.net/yang79tao/article/details/7724514 2.3版更新内容: 消息(std::string包装)不再用boost::shared_ptr包装,之前有过度使用智能指针之嫌。效率上,std::string如果支持引用记数,或者编译器支持std::move语义,是没有损失的(因为也不存在内存的拷贝,反而省了智能指针使用上的开销),幸好vc支持std::move语义(虽然它不支持引用记数,linux则都支持)。这样带来一个问题,原来所有的接口中的boost::shared_ptr<std::string>数据类型,全部换成了std::string引用,升级到2.3的朋友要注意修改之前重写虚函数的签名,如果不改,则重写肯定不生效,变成了新增加虚函数了(因为签名不一样)。这样向大家道歉,接口签名以后应该不会变化了,但可能增加接口; 修复使用std::advance的一个BUG,此BUG在linux下不存在,这里顺便向大家说一下,std::advance在vc和gcc下面,语义一样,但处理方式有些不同,一定要注意; 增加了个专门用于服务端压力测试的客户端框架st_test_client,并写了一个demo test_client,可以在performance_test目录下面找到; 把连接服务端逻辑从st_client剥离出来,定义了一个新的类st_connector,st_client和st_test_client将从它继承; 增加对vc2010的支持,和编译时对编译器版本的检测,如果达不到vc2010及其以上的版本,st_asio_wrapper将直接报错。