打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
各式不同C++编程网络库对比

各式不同C++编程网络库对比

Builder开发者在线 来源: 中国IT实验室 2012年06月04日 评论(0)
关键词: c++
本文摘要

目前市面上存在许多开源的C/C++网络库中,各个网络库都有各自不同的特点,目前市面上常用的就那么几个,较为轻量级的有libevent,libev,还有Boost的ASIO.而在业界知名度最高的,应该是 ACE了,不过是个重量级的网络库。

 目前市面上存在许多开源的C/C++网络库中,各个网络库都有各自不同的特点,目前市面上常用的就那么几个,较为轻量级的有libevent,libev,还有Boost的ASIO.而在业界知名度最高的,应该是 ACE了,不过是个重量级的网络库。

libevent是一个C语言写的网络库,官方主要支持的是类linux操作系统,最新的版本添加了对windows的IOCP的支持。在跨平台方面主要通过select模型来进行支持。

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

libev是一个C语言写的,只支持linux系统的库,使用方法类似libevent,但是非常简洁,代码量是最少的一个库。跨平台支持的不好,如果你只需要在linux下面运行,那还是可以的。

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

下面主要通过ACE网络库来分析开源的C/C++网络库,主要是因为ACE网络库在使用中,常常有学习者一直对其中的内存管理搞得一头雾水,Boost的ASIO,在内存管理方面要直观的多。下面简单地与ACE做个比较。

1.设计模式:ACE主要应用了Reactor,Proactor等。而ASIO主要应用了Proactor.libevent为Reactor模式

2.层次架构:ACE底层是C风格的OS适配层,上一层基于C++的wrap类,再上一层是一些框架(Accpetor,Connector,Reactor,Proactor等),最上一层是框架上服务。

Boost.ASIO与之类似,底层是OS的适配层,上一层一些模板类,再上一层模板类的参数化(TCP/UDP),再上一层是服务,它只有一 种框架为io_service.livevent在不同的操作系统下,做了多路复用模型的抽象,可以选择使用不同的模型,通过事件函数提供服务。

3.可移植性:ACE支持多种平台,可移植性不存在问题,据说socket编程在linux下有不少bugs.ASIO支持多种平台,可移植性 不存在问题;libevent主要支持linux平台,freebsd平台,其他平台下通过select模型进行支持,效率不是太高。

4.事件分派处理:ACE主要是注册handler类,当事件分派时,调用其handler的虚挂勾函数。实现 ACE_Handler/ACE_Svc_Handler/ACE_Event_handler等类的虚函数;ASIO是基于函数对象的hanlder事 件分派。任何函数都可能成为hanlder,少了一堆虚表的维护,调度上优于ACE.libevent基于注册的事件回调函数来实现事件分发。

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

ASIO只涉及到Socket,提供简单的线程操作;libevent只提供了简单的网络API的封装,线程池,内存池,递归锁等均需要自己实现。

6.线程调度:ACE的Reactor是单线程调度,Proactor支持多线程调度;ASIO支持单线程与多线程调度;libevent的线程调度需要自己来注册不同的事件句柄。

7.发布方式:ACE是开源免费的,不依赖于第3方库,一般应用使用它时,以动态链接的方式发布动态库;ASIO是开源免费的,依赖Boost,应用使用时只要include头文件,不需动态库;libevent为开源免费的,一般编译为静态库进行使用。

8.开发难度:基于ACE开发应用,对程序员要求比较高,要用好它,必须非常了解其框架。在其框架下开发,往往new出一个对象,不知在什么地方释放好。

基于ASIO开发应用,要求程序员熟悉函数对象,函数指针,熟悉boost库中的boost::bind.内存管理控制方面。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
一个程序员的Java和C 学习之路(整理)
经典的C 库
C++库大汇
微信异步化改造实践:8亿月活、单机千万连接背后的后台解决方案
posix 多线程有感
goroutine和线程区别
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服