c++通信框架

举报
风吹稻花香 发表于 2021/06/04 23:17:47 2021/06/04
【摘要】   Boost.Asio使用入门   https://www.cnblogs.com/hanerfan/p/5161955.html   下面简单地与ACE做个比较。 1、层次架构: ACE底层是C风格的OS适配层,上一层基于C++的wrap类,再上一层是一些框架(Accpetor, Connector,Reactor,Proact...

 

Boost.Asio使用入门

 

https://www.cnblogs.com/hanerfan/p/5161955.html

 

下面简单地与ACE做个比较。

1、层次架构:

ACE底层是C风格的OS适配层,上一层基于C++的wrap类,再上一层是一些框架(Accpetor, Connector,Reactor,Proactor等),最上一层是框架上服务。

Boost.ASIO与之类似,底层是OS的适配层,上一层一些模板类,再上一层模板类的参数化(TCP/UDP),再上一层是服务,它只有一种框架为io_service。

livevent在不同的操作系统下,做了多路复用模型的抽象,可以选择使用不同的模型,通过事件函数提供服务。

2、涉及范围:

ACE包含了日志,IPC,线程池,共享内存,配置服务,递归锁,定时器等。

ASIO只涉及到Socket,提供简单的线程操作。

libevent只提供了简单的网络API的封装, 线程池, 内存池, 递归锁等均需要自己实现。

3、设计模式:

ACE主要应用了Reactor,Proactor等。

而ASIO主要应用了Proactor。

libevent为Reactor模式

4、线程调度:

ACE的Reactor是单线程调度,Proactor支持多线程调度。

ASIO支持单线程与多线程调度。

libevent的线程调度需要自己来注册不同的事件句柄。

5、事件分派处理:

ACE主要是注册handler类,当事件分派时,调用其handler的虚挂勾函数。实现ACE_Handler / ACE_Svc_Handler / ACE_Event_handler等类的虚函数。

ASIO是基于函数对象的hanlder事件分派。任何函数都可能成为hanlder,少了一堆虚表的维护,调度上优于ACE。

libevent基于注册的事件回调函数来实现事件分发。

6、发布方式:

ACE是开源免费的,不依赖于第3方库, 一般应用使用它时,以动态链接的方式发布动态库。

ASIO是开源免费的,依赖Boost,应用使用时只要include头文件,不需动态库。

libevent为开源免费的,一般编译为静态库进行使用。

7、可移植性:

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

ASIO支持多种平台,可移植性不存在问题。

libevent主要支持linux平台,freebsd平台, 其他平台下通过select模型进行支持, 效率不是太高。

8、开发难度:

基于ACE开发应用,对程序员要求比较高,要用好它,必须非常了解其框架。在其框架下开发,往往new出一个对象,不知在什么地方释放好。

基于ASIO开发应用,要求程序员熟悉函数对象,函数指针,熟悉boost库中的boost::bind。内存管理控制方面。

基于libevent开发应用,相对容易, 具体大家可以参考memcached这个开源的应用,里面使用了libevent这个库。

文章来源: blog.csdn.net,作者:网奇,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/jacke121/article/details/89415274

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。