c++通信框架

网友投稿 805 2022-05-30

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等。

c++通信框架

而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这个库。

C++ 任务调度

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:APIG(原创)
下一篇:Py之Queue:python库之Queue的简介、安装、使用方法之详细攻略
相关文章