您的位置:首页 > 理论基础 > 计算机网络

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

2015-07-30 17:23 381 查看
开源C/C++网络库:

ACE C++语言 跨平台

Boost的ASIO C++语言 跨平台

libevent C语言 主要支持linux,新版增加了对windows的IOCP的支持

libev C语言 只支持linux,只封装了EPOLL模型

层次架构:

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

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

libevent :libevent在不同OS下,做了多路复用模型的抽象,可以选择不同的模型,通过事件函数提供服务。

涉及范围:

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

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

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

开发难度:

ACE:ACE难度较大,必须了解其框架

Boost的ASIO:难度适中要求熟悉boost库中的boost::bind,内存管理等

libevent :相对容易

发布方式:

ACE:ACE不依赖第3方库,以DLL方式提供

Boost的ASIO:依赖Boost,使用时只要include头文件,不需要动态库

libevent :一遍编译为静态库使用

线程调用:

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

Boost的ASIO:支持单线程和多线程调度。

libevent :线程调度需要自己来注册不同的时间句柄。

事件分派处理:

ACE:ACE注册handler类,事件分派时,调用其handler的虚挂钩函数,实现ACE_Handler/ACE_Svc_Handler/ACE_Event_handler等类的虚函数。

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

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

设计模式:

ACE:ACE 主要应用了Reactor("信号驱动IO"),Proactor(异步IO)

Boost的ASIO:Proactor

libevent :Reactor
http://wanglimin2004.blog.163.com/blog/static/115488498201271611723476/
ZeroMQ:

普通socket是端到端,ZeroMQ却可以N:M的关系

3中通讯模式:

请求回应模型,请求段发起请求,等待回应端回应请求。 请求端与回应端是1:N的,可以扩展成N:M的。

发布订阅模型,发布端单向发送数据,不关心信息是否都发送给了订阅端。订阅端只负责接收,不反馈。若交互,需要额外的socket采用请求回应模型实现。

管道模型,管道是单向的,从PUSH端单向的向PULL端单向的推送数据流。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: