ACE与ASIO之间关于Socket编程的比较

转载 2007年09月21日 10:06:00

ACE与ASIO之间关于Socket编程的比较

转自:FREE MY SOUL

ACE是一个很成熟的中间件产品,为自适应通讯环境,但它过于宏大,一堆的设计模式,架构是一层又一层,对初学者来说,有点困难。
ASIO是基本Boost开发的异步IO库,封装了Socket,简化基于socket程序的开发。

最近分析ASIO的源代码,让我无不惊呀于它设计。在ACE中开发中的内存管理一直让人头痛,ASIO的出现,让我看到新的曙光,成为我新的好伙伴。简单地与ACE做个比较。

1.层次架构:
ACE底层是C风格的OS适配层,上一层基于C++的wrap类,再上一层是一些框架(Accpetor, Connector,Reactor等),最上一层是框架上服务。
ASIO与之类似,底层是OS的适配层,上一层一些模板类,再上一层模板类的参数化(TCP/UDP),再上一层是服务,它只有一种框架为io_service。

2.涉及范围:
ACE包含了日志,IPC,线程,共享内存,配置服务等。
ASIO只涉及到Socket,提供简单的线程操作。

3.设计模式:
ACE主要应用了Reactor,Proactor等。
而ASIO主要应用了Proactor。

4.线程调度:
ACE的Reactor是单线程调度,Proactor支持多线程调度。
ASIO支持单线程与多线程调度。

5.事件分派处理:
ACE主要是注册handler类,当事件分派时,调用其handler的虚挂勾函数。实现ACE_Handler/ACE_Svc_Handler/ACE_Event_handler等类的虚函数。
ASIO是基于函数对象的hanlder事件分派。任何函数都可能成功hanlder,少了一堆虚表的维护,调度上优于ACE。

6.发布方式:
ACE是开源免费的,不依赖于第3方库, 一般应用使用它时,以动态链接的方式发布动态库。
ASIO是开源免费的,依赖Boost,应用使用时只要include头文件,不需动态库。

7.可移植性:
ACE支持多种平台,可移植性不存在问题,据说socket编程在linux下有不少bugs。
ASIO支持多种平台,可移植性不存在问题。

8.开发难度:
基于ACE开发应用,对程序员要求比较高,要用好它,必须非常了解其框架。在其框架下开发,往往new出一个对象,不知在什么地方释放好。
基于ASIO开发应用,要求程序员熟悉函数对象,函数指针,熟悉boost库中的boost::bind。内存管理控制方便。


我个人觉得,如果应用socket编程,使用ASIO开发比较好,开发效率比较高。ACE适合于理论研究,它本来就是源于Douglas的学术研究。



ACE与ASIO之间关于Socket编程的比较

ACE与ASIO之间关于Socket编程的比较转自:FREE MY SOULACE是一个很成熟的中间件产品,为自适应通讯环境,但它过于宏大,一堆的设计模式,架构是一层又一层,对初学者来说,有点困难。A...
  • zhuky
  • zhuky
  • 2010年01月05日 16:33
  • 609

ACE与ASIO关于SOCKET编程之间的比较

ACE是一个很成熟的中间件产品,为自适应通讯环境,但它过于宏大,一堆的设计模式,架构是一层又一层,对初学者来说,有点困难。 ASIO是基本Boost开发的异步IO库,封装了Socket,简化基于so...
  • huiguimoyu
  • huiguimoyu
  • 2014年03月10日 12:45
  • 1064

开源网络库ACE、Boost的ASIO、libevent、libev、ZeroMQ

开源C/C++网络库: ACE          C++语言 跨平台 Boost的ASIO  C++语言 跨平台 libevent     C语言   主要支持linux,新版增加了对windo...
  • woshiyuanlei
  • woshiyuanlei
  • 2015年07月30日 17:23
  • 1732

各种网络库比较 asio libevent

libevent libev libuv node.js   工具库和框架之间的区别,asio是被设计成一套工具库而不是框架。 什么是框架? 框架就是一套固定了编程...
  • dongchongyang
  • dongchongyang
  • 2017年05月27日 14:39
  • 930

Boost.Asio,libevent和ACE之间关于Socket编程的比较(★firecat推荐★)

文章来源:http://blog.163.com/miky_sun/blog/static/3369405201041753652505/ ACE是一个很成熟的中间件产品,为自适应通讯环境,但它过...
  • libaineu2004
  • libaineu2004
  • 2015年02月09日 14:54
  • 7458

Boost.Asio与ACE比较(C++):

Boost.Asio与ACE比较(C++): ASIO是基本Boost开发的异步IO库,封装了Socket,简化基于socket程序的开发。  Boost.Asio是利用当代C++...
  • legend050709
  • legend050709
  • 2014年09月26日 18:55
  • 2292

Reactor模型库之boost::asio::io_service与ACE_Reactor

boost::asio::io_service与ACE_Reactor均是应用了Reactor同步IO模型,下面通过类比对这两个库进行学习。 Reactor模式是处理并发I/O比较常见的一种模...
  • Haidi_Elisa
  • Haidi_Elisa
  • 2015年10月09日 15:50
  • 510

Boost.Asio和ACE之间关于Socket编程的比较

ACE是一个很成熟的中间件产品,为自适应通讯环境,但它过于宏大,一堆的设计模式,架构是一层又一层,对初学者来说,有点困难。  ASIO是基本Boost开发的异步IO库,封装了Socket,简化基于s...
  • educast
  • educast
  • 2013年10月27日 08:39
  • 784

【兴趣爱好】之:Boost.Asio和ACE之间关于Socket编程的比较

ACE是一个很成熟的中间件产品,为自适应通讯环境,但它过于宏大,一堆的设计模式,架构是一层又一层,对初学者来说,有点困难。  ASIO是基本Boost开发的异步IO库,封装了Socket,简化基于s...
  • xuqiang918
  • xuqiang918
  • 2013年11月07日 11:12
  • 866

ACE中的TCP Socket编程

Tcp通信过程一般为如下步骤: 服务器绑定端口,等待客户端连接。 客户端通过服务器的ip和服务器绑定的端口连接服务器。 服务器和客户端通过网络建立一条数据通路,通过这条数据...
  • lishuo102
  • lishuo102
  • 2012年04月20日 09:37
  • 2617
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ACE与ASIO之间关于Socket编程的比较
举报原因:
原因补充:

(最多只允许输入30个字)