zoukankan      html  css  js  c++  java
  • 开源网络库ACE、Boost的ASIO、libevent、libev、ZeroMQ

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

  • 相关阅读:
    学习制作操作系统 0
    阅读《C陷阱与缺陷》的知识增量
    CSS 优先级和特指度
    openCV2马拉松第19圈——Harris角点检測(自己实现)
    Cacti监控mysql数据库server实现过程
    ledisdb:支持类redis接口的嵌入式nosql
    03005_SQL查询语句
    通过smtp直接发送邮件
    XML 解析默认去掉命名空间和注释
    C# /VB.NET 创建PDF项目符号列表和多级编号列表
  • 原文地址:https://www.cnblogs.com/leijiangtao/p/5197566.html
Copyright © 2011-2022 走看看