注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

还东国的博客

行之苟有恒,久久自芬芳

 
 
 

日志

 
 

(转载)ACE与ASIO之间关于Socket编程的比较  

2012-01-19 09:13:22|  分类: 网络服务编程技术 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

 晕,连评论都顺道转来了,哈哈。
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-21 10:27 金庆 阅读(606) 评论(16) 编辑 收藏 引用 所属分类: 1. C/C++

 


评论
# re: ACE与ASIO之间关于Socket编程的比较 2007-09-21 23:01 missdeer

发现asio占用CPU很厉害,而且不知道是不是我用得不对,传输效率并不高。。。  回复 更多评论


# re: ACE与ASIO之间关于Socket编程的比较 2007-09-22 10:15 金庆

@missdeer
ACE,asio都没用过。只是用了boost中几个库之后,对boost有好感。以前的网络编程都是直接用socket。是否选用asio还需要自己考察。  回复 更多评论


# re: ACE与ASIO之间关于Socket编程的比较[未登录] 2007-09-24 16:16 exile

asio本身并不占用多少资源, 如果网络连接数不多,但占用CPU很厉害, 那肯定时是自己写的程序某个地方出了问题.  回复 更多评论


# re: ACE与ASIO之间关于Socket编程的比较 2007-09-24 23:34 missdeer

@exile
我也希望是自己写的代码的问题,毕竟要选择用一个框架来进行开发,对于一个稳重的项目组来说是很大的一个决心。可是我用的测试代码就是asio自带的例子程序,其它相关的文档提及的也少……  回复 更多评论


# re: ACE与ASIO之间关于Socket编程的比较[未登录] 2007-09-25 10:56 eXile

@missdeer
那就应该分析一下测试的环境. 看一下有连接时,无连接时, 局域网中, 公网中.
asio本身带的例子是很简单的, 都是用法演示,最多也就服务器设定几个线程.
在局域网中进行这样的测试是没有什么意义的.
boost 的 thread 和asio都是有可能作为系统支持库进入std::tr2的.
回复 更多评论


# re: ACE与ASIO之间关于Socket编程的比较 2007-09-27 17:05 金庆

@missdeer
我下载了asio 0.3.8准备试试它的例子。不过发现asio不支持VC6。boost其它库都是支持VC6的,而asio只支持VC7.1和VC8。  回复 更多评论


# re: ACE与ASIO之间关于Socket编程的比较 2007-09-27 21:53 missdeer

@金庆
如果要用Boost之类的模板库,强烈建议放弃VC6,改用7.1或8.0,无论从编译器对标准的兼容,还是第三方库对编译器的支持上看,7.1都远远好于6.0  回复 更多评论


# re: ACE与ASIO之间关于Socket编程的比较 2007-09-28 09:06 金庆

@missdeer
我想的是放弃VC。只要我掌握了wxWidgets,就可以抛弃MFC,然后抛弃VC。  回复 更多评论


# re: ACE与ASIO之间关于Socket编程的比较 2007-09-28 20:36 BlueEngine

问个问题:看上了wxWidgets的i18n,如何利用它来实现现有MFC程序的国际化?各位朋友请给个建议。  回复 更多评论


# re: ACE与ASIO之间关于Socket编程的比较 2007-09-29 09:28 金庆

@BlueEngine
以前做过MFC两套资源来实现中英语言版本。如是只是两个语言,就没必要用i18n。当然如果会用wxWidgets的i18n,或者用过,可能选它是正确的选择。  回复 更多评论


# re: ACE与ASIO之间关于Socket编程的比较 2007-12-19 15:37 金庆

@missdeer
不知占用CPU很厉害的原因找到没有?我试了asio的几个例子,都还不错。只要理解了Proactor模式,使用上应该是相当方便的。  回复 更多评论


# re: ACE与ASIO之间关于Socket编程的比较[未登录] 2007-12-19 21:30 missdeer

平常小数据量传输是看不出什么,但如果数据量一大,就很明显了,你可以试试它的一个http client例子,让它下载一个1M大小的文件,不管你的网络环境如何,都会很占CPU。  回复 更多评论


# re: ACE与ASIO之间关于Socket编程的比较 2007-12-20 15:23 沐枫

从版本号也能看出来。asio目前只有0.3.9,还远未到开发完整。
因此,成熟自然也远未到。  回复 更多评论


# re: ACE与ASIO之间关于Socket编程的比较 2007-12-20 17:11 金庆

测了一下,确实是这样。对于内网传输CPU占满了,对外网(网速很低)没有明显的CPU占用。与网络环境无关吗?如果是低流量时占CPU,那肯定是有问题。数据流量大时,可以解释为接收数据太忙,不过也是不正常(相比其它下载工具)。  回复 更多评论


# re: ACE与ASIO之间关于Socket编程的比较 2008-01-29 15:08 lunny

asio有两个版本,一个依赖于boost的,将来会加入boot库,同时也会发布一个独立的,并不一定非要用依赖于boost的那个版本。  回复 更多评论


# re: ACE与ASIO之间关于Socket编程的比较 2008-04-09 11:14 fafa

@lunny
依赖于boost那个版本比较好编译嘛  回复 更多评论

  评论这张
 
阅读(882)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017