开源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端单向的推送数据流。

开源网络库ACE、Boost的ASIO、libevent、libev、ZeroMQ的更多相关文章

  1. 开源网络库的分析libev libevent nginx ....

    最经看关于网络编程的一些书,对于网络编程中的一些基本东西,开源库已经封装的很好了,但是库归根结底还是使用的基本API,所以就想着分析一下,尤其是在看了各个库的介绍以后,所以这段时间想在这个方向投入一点 ...

  2. boost::asio::spawn 将一统C++网络库

    boost::asio::spawn 将一统C++网络库(金庆的专栏)boost::asio::spawn()创建一个协程,使C++网络编程大大简化,个人认为这使得 asio 成为C++首选网络库.b ...

  3. Mudo C++网络库第六章学习笔记

    muduo网络库简介 高级语言(Java, Python等)的Sockects库并没有对Sockects API提供更高层的封装, 直接用它编写程序很容易掉到陷阱中: 网络库的价值还在于能方便地处理并 ...

  4. 网络库crash以及boost asio strand dispath分析

    最近在做服务器的稳定性的相关测试,服务器的网络底层使用的是boost asio,然后自己做的二次封装以更好的满足需求. 服务器昨天晚上发现crash了一次,之前测试了将近半个多月,有一次是莫名的退出了 ...

  5. Boost中的网络库ASIO,nginx

    boost C++ 本身就是跨平台的,在Linux.Unix.Windos上都可以使用. Boost.Asio  针对网络编程,很多服务端C++开发使用此库. 这个库在以下的平台和编译器上测试通过: ...

  6. 开源免费的C/C++网络库(c/c++ sockets library)

    (1)ACE 庞大.复杂,适合大型项目.开源.免费,不依赖第三方库,支持跨平台. http://www.cs.wustl.edu/~schmidt/ACE.html (2)Asio Asio基于Boo ...

  7. 【转】开源C/C++网络库比较

    在开源的C/C++网络库中, 常用的就那么几个, 在业界知名度最高的, 应该是ACE了, 不过是个重量级的大家伙, 轻量级的有libevent, libev, 还有 Boost的ASIO. ACE是一 ...

  8. 开源C/C++网络库比较

    在开源的C/C++网络库中, 常用的就那么几个, 在业界知名度最高的, 应该是ACE了, 不过是个重量级的大家伙, 轻量级的有libevent, libev, 还有 Boost的ASIO. ACE是一 ...

  9. 开源免费的C/C++网络库(c/c++ sockets library)补充

    (1)ACE 庞大.复杂,适合大型项目.开源.免费,不依赖第三方库,支持跨平台. http://www.cs.wustl.edu/~schmidt/ACE.html (2)Asio Asio基于Boo ...

随机推荐

  1. IdentityServer4-主题

    一.Startup 二.定义Resources 三.定义Clients 四.登录 五.使用外部身份提供商登录 六.Windows身份验证 七.登出 八.注销外部身份提供商 九.联合注销 十.联合网关 ...

  2. loj#2016. 「SCOI2016」美味

    题目链接 loj#2016. 「SCOI2016」美味 题解 对于不带x的怎么做....可持久化trie树 对于带x,和trie树一样贪心 对于答案的二进制位,从高往低位贪心, 二进制可以表示所有的数 ...

  3. BZOJ.2287.[POJ Challenge]消失之物(退背包)

    BZOJ 洛谷 退背包.和原DP的递推一样,再减去一次递推就行了. f[i][j] = f[i-1][j-w[i]] + f[i-1][j] f[i-1][j] = f[i][j] - f[i-1][ ...

  4. Python3面向对象——案例-01

    经典的策略模式案例 问题描述 使用"策略"设计模式处理订单折扣的 UML 类图 定义一系列算法,把它们一一封装起来,并且使它们可以相互替换.本模式使得算法可以独立于使用它的客户而变 ...

  5. 潭州课堂25班:Ph201805201 爬虫基础 第二课 fidder (课堂笔记)

    通过浏览器访问百度的详细过程? 一.通过dns获取百度IP地址.二.通过百度IP访问百度服务器, 三,返回数据. 四,通过渲染显示内容, fidder设置 tf 信任证书

  6. Syntax error , insert “EnumBody” to complete EnumDeclaration

    当@Test写在方法前面的时候因为没有导入junit的jar包,如果已经导入架包依然是同样的错误,那就是方法没写对,或者还没有写方法

  7. Java中获取指定日为星期几及其他日期操作

    摘自:http://blog.csdn.net/cselmu9/article/details/8625530#t6 在开发中经常会使用到一些日期方面的操作,下面例子展示几个常用的操作. 1.取得指定 ...

  8. python图片和分形树

    链接: 这10个Python项目很有趣! Python 绘制分形图(曼德勃罗集.分形树叶.科赫曲线.分形龙.谢尔宾斯基三角等)附代码 使用Python生成树形图案 神奇的代码:用 Python 生成分 ...

  9. Python和Mysql、Nginx

    链接: python入门和基础: Python 中文学习大本营 你是如何自学 Python 的? 简明 Python 教程 给伸手党的福利:Python 新手入门引导 <Python爬虫学习系列 ...

  10. JDBC(3)—ResultSet结果集

    简介:ResultSet:结果集.封装了使用JDBC进行查询的结果.Statement只能进行更新操作,所以使用ResultSet进行查询操作. 1.调用Statement对象的executeQuer ...