开源C/C++网络库比较 ace &&bosst

网络库的使用(libevent、ACE、boost::asio) react、proact模式比较 阅读详情

下载LOFTER客户端

ACE是一个大型的中间件产品,代码20万行左右,过于宏大,一堆的设计模式,架构了一层又一层,使用的时候, 要根据情况,看你从那一层来进行使用。

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

  ACE是一个大型的中间件产品,代码20万行左右,过于宏大,一堆的设计模式,架构了一层又一层,使用的时候, 要根据情况,看你从那一层来进行使用。支持跨平台。

  Boost的ASIO是一个异步IO库,封装了对Socket的常用操作,简化了基于socket程序的开发。支持跨平台。

  libevent是一个C语言写的网络库, 官方主要支持的是类linux 操作系统, 最新的版本添加了对windows的IOCP的支持。由于IOCP是异步IO,与linux下的POLL模型,EPOLL模型,还有freebsd的KQUEUE等这些同步模型在用法上完全不一致,所以使用方法也不一样,就好比ACE中的Reactor和Proactor模式一样, 使用起来需要转变思路。如果对性能没有特别的要求, 那么使用libevent中的select模型来实现跨平台的操作, select模型可以横跨windows, linux, unix,solaris等系统。

  libev是一个C语言写的,只支持linux系统的库,我以前研究的时候只封装了EPOLL模型, 不知道现在的新版有没有改进。使用方法类似libevent, 但是非常简洁,代码量是最少的一个库,也就几千行代码。显然这样的代码跨平台肯定是无法支持的了, 如果你只需要在linux下面运行,那用这个库也是可以的。

  ACE网络库在使用中,一直对其中的内存管理搞得一头雾水,分配的内存需要在哪里释放都不知道,ACE不愧是一个做研究用的库, 可以说里面的封装把设计模式这本书中列出的模式都在代码里面实现了一番,用起来感觉是在用java一样,如果你想使用ACE作为你的网络库, 千万不要仅仅把它当成一个网络库使用, 你要把它当成一个框架来使用,如果你只想用它的网络库, 那大可不必用ACE, 因为它太庞大了,学习起来太费劲。但是你把它当成一个框架来用,你会感觉用的还真爽,该有的东西都有,比如线程池,内存池,定时器,递归锁等,都很方便的。Boost的ASIO,在内存管理方面要直观的多。下面简单地与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这个库。

http://webservices.ctocio.com.cn/354/12203854_2.shtml

学之者生,用之者死——ACE历史与简评 转载一篇大牛的文章 http://blog.youkuaiyun.com/Solstice/article/details/5364096 学之者生,用之者死——ACE历史与简评 分类: c++ 2010-03-10 11:06 37964人阅读 评论(210) 收藏 举报 网络编程linux平台设计模式freebsd 目录(?)[+] 学之者生,用 阅读详情

相关推荐

ACE库 一个简单的socket通信

注:运行前,先配置好ACE库,本demo使用的是ACE6.0 本例子实现了一个简单的socket tcp通信。供初学者学习使用。 ACE安装配置参考: http://blog.youkuaiyun.com/hireboy/article/details/8863458

转:开源C++库比较

转:开源C++库比较 2012年01月13日   原文:   http://blog.youkuaiyun.com/langeldep/article/details/6976120   在开源的C/C++网络库中, 常用的就那么几个, 在业界知名度最高的, 应该是ACE了, 不过是个重量级的大家伙, 轻量级的有libevent, libev, 还有 Boost的ASIO。   ACE是一个大...

uyp85uyp 331

RTKLIB模糊度固定实战:三种模式对比与部分模糊度固定代码解析

本文深入解析RTKLIB中模糊度固定的三种核心模式(continuous、instantaneous、fix and hold),对比其性能与适用场景,并详细拆解了部分模糊度固定技术的源码实现。通过实战案例与代码级解析,为GNSS高精度定位开发者提供了在不同数据特性下提升固定成功率的优化思路与配置建议。

efc1234567的博客 473

C语言网络库全面详细解析

本文全面介绍了C语言中几个重要的网络库:libuv、libevent、cURL。每个库都有其独特的特点和适用场景,为不同的网络编程需求提供了强大的工具。libuv:适用于需要跨平台异步I/O的应用程序,特别适合网络服务器和需要处理大量并发连接的应用。libevent:适合事件驱动的网络服务器和客户端应用,能够高效处理大量并发连接和异步I/O操作。cURL:适用于需要发送HTTP请求的应用程序,如网络爬虫、API客户端和自动化测试工具。选择合适的库取决于你的具体需求和你对网络编程任务的复杂性。

极客代码 3305

项目经理面试 5 大高频题 + 实战回答模板,帮你稳拿 offer

项目经理面试5大高频问题及应答技巧 摘要:本文总结了项目经理岗位常见的5个面试问题及回答策略,帮助求职者更有针对性地准备面试。核心问题包括:1)描述负责过的典型项目;2)常用项目管理工具;3)项目遇到的挑战及解决方案;4)风险管理方法;5)项目成功标准。每个问题都从面试官考察重点、回答技巧、实战案例三个维度进行分析,强调要用STAR法则(情境-任务-行动-结果)结构化表达,突出解决问题的能力而非简单罗列经历。特别提醒要量化项目成果(如提前2周上线、节省8%预算等),并注意展示商业思维和团队协作能力。

逸尘谈PM 2109

Grok 3国内怎么用?超详细使用指南+实用指令模板

主要是用于快速分析学术论文,提取关键信息,总结研究成果。Analyze the following research paper: [粘贴或上传论文内容]1. Extract key findings, methodologies, and conclusions. (提取主要发现、方法和结论。2. Identify statistical significance and data points. (识别统计显著性和数据点。

Survivor_sl的博客 1万+

开源C/C++网络库比较 ace &&bosst &&libEvent

ACE是一个大型的中间件产品,代码20万行左右,过于宏大,一堆的设计模式,架构了一层又一层,使用的时候, 要根据情况,看你从那一层来进行使用。   在开源的C/C++网络库中, 常用的就那么几个, 在业界知名度最高的, 应该是ACE了, 不过是个重量级的大家伙, 轻量级的有libevent, libev, 还有 Boost的ASIO。   ACE是一个大型的中间件产品,代码20万行左右

varyall的专栏 2259

Seafile搭建以及onlyoffice在线办公

部署seafile docker-compose.yml 如下: 参考此篇文章 version: '2.0' services: db: image: mariadb:10.1 container_name: seafile-mysql environment: - MYSQL_ROOT_PASSWORD=db_dev # mysql root的密码,同时修改 seafile的DB_ROOT_PASSWD与这个一致 - MYSQL_LOG_CONSOLE

dwdcth的专栏 4659

c++的网络库有哪些

c 语言的网络库有很多,常见的有以下几种: winsock:windows 系统下常用的网络库,使用起来比较方便,但只能用于 windows 系统。 libcurl:一个跨平台的网络库,支持多种协议,包括 HTTP、FTP、SMTP 等,使用起来也比较方便。 libevent:一个事件驱动的网络库,使用起来比较灵活,适合处理高并发的网络应用。 libpcap:一个网络嗅探库,可以用来抓取网...

weixin_42578963的博客 1665

Codex没有官方Chrome插件?详解Codex CLI安装配置与替代方案

在AI编程工具快速演进的今天,开发者常误以为Codex会以浏览器插件形式存在,但Chrome商店搜索无果背后是产品形态的定位差异。理解Codex作为智能编程代理的本质,才能正确选择使用方式——它通过读取本地代码库、执行命令来完成重构、测试与代码生成,核心技术载体是Codex CLI、桌面客户端与IDE扩展。对于依赖浏览器工作流的开发者,ChatGPT网页版Codex面板、VS Code官方扩展等替代路径能实现同等能力。本文从安装环境准备、config.toml配置到常见报错排查,系统梳理Codex的实际落地

weixin_42526166的博客 454

Transformer实战(32)——Transformer模型压缩

在本节中,我们学习了如何在硬件资源受限的情况下减轻运行大模型的负担。我们介绍了如何通过蒸馏、剪枝和量化从训练好的模型中提取高效模型。预训练轻量级的通用语言模型(如 DistilBERT) 可以在各种任务上进行微调,并表现出与非蒸馏模型相当的性能。随着数据量的不断增加,我们希望模型能够更快地运行,在这方面,高效 Transformer 起着至关重要的作用。

盼小辉丶的博客 2621

C 网络库都干了什么?

虽然市面上已经有很多成熟的网络库,但是编写一个自己的网络库依然让我获益匪浅,这篇文章主要包含:TCP 网络库都干了些什么?编写时需要注意哪些问题?CppNet 是如何解决的。首先,大家都...

轻松学C语言 714

手把手教你学Simulink——基于经典PID控制的电机系统场景实例:步进电机PID位置控制系统的实现

步进电机(Stepper Motor)是一种将电脉冲信号转化为角位移的执行元件,具有结构简单、控制方便、定位精度高等优点,广泛应用于数控机床、机器人、打印机、3D打印机等需要精确定位的场合。传统的步进电机多采用开环控制,但在高速或负载变化较大的情况下容易出现丢步、振荡等问题。为提高控制精度与响应性能,闭环PID控制被引入步进电机的位置控制中,通过编码器或旋转变压器等反馈装置,实现高精度、高稳定性的位置控制。本教程将带你使用构建一个基于PID控制的步进电机位置控制系统仿真模型步进电机建模。

MHD0815的博客 9698

优秀的开源C++库:ACE及其安装使用

优秀的开源C++库:ACE及其安装使用 发布: 2007-7-01 20:40 | 作者: admin | 来源: | 查看: 138次 | 进入软件测试论坛讨论 开源C++库:ACE及其安装使用 什么是ACE?   ACE自适配通信环境(ADAPTIVE Communication Environment)是可以自由使用、开放源码的面向对象(OO)框架(Framework

闪电小子 1433

Linux:安装Debian最新10.x操作系统(超详细)

安装Debian最新10.x操作系统安装Debian最新10.x操作系统1.下载Debian镜像2. 镜像安装引导启动页面,选择图形化安装:选择语言、时区,选中后点击continue:选择键盘模式:配置Hostname主机名,设置Root密码创建普通用户名和密码,进入磁盘分区步骤,选择“所有文件放在同一个分区”确认分区信息磁盘配置完,进入软件安装模块:选择源:进入软件包配置,等待配置结束根据需要选择软件包安装3. 安装完成重启后登录使用 安装Debian最新10.x操作系统 1.下载Debian镜像 下载D

HowieXue 薛永浩的博客 3万+

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

C++网络库探索(一)

前两天絮絮叨叨,没说一句有用的东西,今天打算分享一点有价值的东西。 开源网络库 网络库 语言 OS 特点 优点 缺点 适合干啥 备注 ACE C++ All “四库全书”,包含很多设计模式,超重 “太好了”,好到没人用的了 代码量大、使用容易出错、代码质量不高。 适合作研究学习 在面向对象、网络编程、设计模式等方面的研究具有重大意义 libevent、libe、libuv C ...

假正经Leo先生 2061

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

c 的网络I/O库总结(libevent,libuv,libev,libeio)

linux 的网络I/O库总结(libevent,libuv,libev,libeio)

weixin_38597669的博客 4153

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

C语言使用Wininet库网络编程跳坑记 —— cookies篇

于是,我将Chrome浏览器开发者工具中的请求头内容完全复制到C语言代码的headers字符串中,并将浏览器的cookie内容复制到C代码的cookie字符串中。令人苦恼的是,同样的请求头和cookies内容运用在 Python 代码里可以成功登录网站,在POSTMAN 里使用同样的请求头和cookies,也能返回正确的成功登录信息。我明明已设定cookies,服务器也返回 cookies 信息,令人百思不得其解的是服务器端为何不能正确处理用户登录,把wininet库的网络请求拒之门外?

Scott0902的博客 759
上一篇: Android Resource介绍和使用
下一篇: 1.写一个Mvc框架_超轻量级MVC框架的设计和实现
codepython
博客等级 码龄20年 125粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值