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

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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

学习各种外挂制作技术,马上去百度搜索"魔鬼作坊"点击第一个站进入、快速成为做挂达人。

目前市面上存在许多开源的C/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.内存管理控制方面。

相关文档
最新文档