文章来源:http://blog.163.com/miky_sun/blog/static/3369405201041753652505/
ACE官网 http://download.dre.vanderbilt.edu/
boost官网 http://www.boost.org/
boost sourceforge http://sourceforge.net/projects/boost/files/
boost第三方教程
http://theboostcpplibraries.com/
http://zh.highscore.de/cpp/boost/
libevent官网http://libevent.org/
https://github.com/libevent/libevent
http://sourceforge.net/projects/levent/
Asio官网 http://think-async.com/
Asio Linux性能 http://think-async.com/Asio/LinuxPerformanceImprovements
Asio sourceforge http://sourceforge.net/projects/asio/files/
Asio samples https://github.com/mabrarov/asio_samples
第三方开源项目高性能网络服务器 http://www.oschina.net/project/tag/352/network-libs
第三方开源项目HP-Socket https://github.com/ldcsaa/HP-Socket
ACE是一个很成熟的中间件产品,为自适应通讯环境,但它过于宏大,一堆的设计模式,架构是一层又一层,对初学者来说,有点困难。
ASIO是基本Boost开发的异步IO库,封装了Socket,简化基于socket程序的开发。
最近分析ASIO的源代码,让我无不惊呀于它设计。在ACE中开发中的内存管理一直让人头痛,ASIO的出现,让我看到新的曙光,成为我新的好伙伴。简单地与ACE做个比较。
boost::asio是一个高性能的网络开发库,Windows下使用IOCP,Linux下使用epoll。与ACE不同的是,它并没有提供一个网络框架,而是采取组件的方式来提供应用接口。但是对于常见的情况,采用一个好用的框架还是能够简化开发过程,特别是asio的各个异步接口的用法都相当类似。
Boost.Asio是利用当代C++的先进方法,跨平台,异步I/O模型的C++网络库.
ACE底层是C风格的OS适配层,上一层基于C++的wrap类,再上一层是一些框架(Accpetor, Connector,Reactor,Proactor等),最上一层是框架上服务。
Boost.ASIO与之类似,底层是OS的适配层,上一层一些模板类,再上一层模板类的参数化(TCP/UDP),再上一层是服务,它只有一种框架为io_service。
libevent在不同的操作系统下,做了多路复用模型的抽象,可以选择使用不同的模型,通过事件函数提供服务。我个人觉得,如果应用socket编程,使用BOOST::ASIO开发比较好,开发效率比较高。ACE适合于理论研究,它本来就是源于Douglas的学术研究。基于BOOST::ASIO开发的网络模型,分为CLIENT/SERVER 两部分,特别适合小公司,公共组件不够强大,需要跨平台时更适合,MAC OS /WIN32/LINUX。支持 TCP/UDP/UDT主要的协议,另外HTTP SSL PROXY等有极好的例子,方便加入的。用户开发起来很简单,无论是CLIENT/SERVER 只需要些5个回调函数, ON_OPEN ON_CLOSE ON_READ ON_WRITE进行具体的业务处理即可。SERVER连接其它SERVER也非常简单。效率么,只能说很高。仅次于大公司在LINUX下或WINDOWS下专门做的组建。。这个原因么。大家可想一想。其中支持UDT协议称为可靠的UDP。传媒体,大文件很不错哦。
推荐教程:
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
http服务器使用BOOST::ASIO框架、socket服务器
基于IO完成端口模型实现网络通信,经正规压力测试工具测试并发10万级,缓存使用MEMCACHE
车联网后台服务器
模块:设备网关 设备业务处理 手机网关 手机推送 透传服务器 缓存服务器 日志服务器
运行环境:windows C++语言 SqlServer 2008R2数据库
使用技术:线程池、数据库连接池、线程同步、单列模板、智能指针、IOCP模型、BOOST::ASIO框架、STL、
数据库存储过程、函数、视图编写、c++面向对象、封装、继承、多态特性、数据加密、第三方接口调用、TCP/IP通信
实现功能:(HTTP服务器)手机终端数据请求响应,车技终端数据请求响应 HTTP POST请求
(SOCKET服务器) OBD设备GPS、OBD、行程、驾驶行为、故障码数据解析入库、消息推送、数据缓存
IOCP、EPOLL等高并发网络通信模型,HTTP服务器、Socket服务器搭建
Sql2008/MYSQL/SQLITE等数据库,数据库连接池。存储过程、函数、视图。
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
而在Proactor模式中,事件处理者(或者代由事件分离者发起)直接发起一个异步读写操作(相当于请求),而实际的工作是由操作系统来完成的。发起时,需要提供的参数包括用于存放读到数据的缓存区,读的数据大小,或者用于存放外发数据的缓存区,以及这个请求完后的回调函数等信息。事件分离者得知了这个请求,它默默等待这个请求的完成,然后转发完成事件给相应的事件处理者或者回调。举例来说,在Windows上事件处理者投递了一个异步IO操作(称有overlapped的技术),事件分离者等IOCompletion事件完成[1]。 这种异步模式的典型实现是基于操作系统底层异步API的,所以我们可称之为“系统级别”的或者“真正意义上”的异步,因为具体的读写是由操作系统代劳的。
举另外个例子来更好地理解Reactor与Proactor两种模式的区别。这里我们只关注read操作,因为write操作也是差不多的。下面是Reactor的做法:
下面再来看看真正意义的异步模式Proactor是如何做的:
现行做法
开源C++开发框架 ACE(Douglas Schmidt, et al.开发) 提供了大量平台独立的底层并发支持类(线程、互斥量等)。 同时在更高一层它也提供了独立的几组C++类,用于实现Reactor及Proactor模式。 尽管它们都是平台独立的单元,但他们都提供了不同的接口。
ACE Proactor在MS-Windows上无论是性能还在健壮性都更胜一筹,这主要是由于Windows提供了一系列高效的底层异步API。
(这段可能过时了点吧) 不幸的是,并不是所有操作系统都为底层异步提供健壮的支持。举例来说, 许多Unix系统就有麻烦。因此, ACE Reactor可能是Unix系统上更合适的解决方案。 正因为系统底层的支持力度不一,为了在各系统上有更好的性能,开发者不得不维护独立的好几份代码: 为Windows准备的ACE Proactor以及为Unix系列提供的ACE Reactor。
就像我们提到过的,真正的异步模式需要操作系统级别的支持。由于事件处理者及操作系统交互的差异,为Reactor和Proactor设计一种通用统一的外部接口是非常困难的。这也是设计通行开发框架的难点所在。