大龙的博客

常用链接

统计

最新评论

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

 

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的学术研究。

posted on 2007-09-22 09:52 大龙 阅读(3593) 评论(3)  编辑 收藏 引用

评论

# re: ACE与ASIO之间关于Socket编程的比较 2008-05-15 18:09 xbzg

ms asio需要动态库的 boost135 vc2005

#include "stdafx.h"
#include <boost/asio.hpp>

int _tmain(int argc, _TCHAR* argv[])
{
return 0;
}

1>e:\boost135\boost_1_35_0\boost\utility\enable_if.hpp : warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
1>e:\boost135\boost_1_35_0\boost\config\abi_prefix.hpp : warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
1>e:\boost135\boost_1_35_0\boost\config\abi_suffix.hpp : warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
1>e:\boost135\boost_1_35_0\boost\utility\enable_if.hpp : warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
1>正在链接...
1>LINK : fatal error LNK1104: 无法打开文件“libboost_system-vc80-mt-gd-1_35.lib”
1>生成日志保存在“file://e:\暂存\VC2005 Projects\testBoostSpirit\testBoostSpirit\Debug\BuildLog.htm”
1>testBoostSpirit - 1 个错误,4 个警告
========== 生成: 0 已成功, 1 已失败, 0 最新, 0 已跳过 ==========

  回复  更多评论   

# re: ACE与ASIO之间关于Socket编程的比较 2008-05-15 19:56 Kevin Lynx

@xbzg
忽略即可,基本上你还需要忽略其他几个默认链接的boost库  回复  更多评论   

# re: ACE与ASIO之间关于Socket编程的比较 2008-06-01 10:29 classyk

asio终于在boost 1.45里正式推出了,轻量级的设计还是不错的。希望以后不要发展到和ACE一样臃肿  回复  更多评论   


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理