C++常用库之网络库

C++一个很大的用途就是作为网络层组件的开发语言。C++开发的第三方网络库也比较多。其实,c语言下的网络库也不少。现在简单介绍一下。

 

 

 

ACE库

ACE是一个大型的中间件产品,代码有几十万行,非常宏大,里面使用了一堆的设计模式,架构了一层又一层,具体使用的时候, 要根据情况,要看从那一层来进行使用。而且,它也支持跨平台。现在基本上都把ACE当成一个框架,它的主要应用场景是高性能和实时通信服务和应用,比如高性能服务器的开发。它简化了使用进程间通信、事件多路分离、显式动态链接和并发的OO网络应用和服务的开发。此外,通过服务在运行时与应用的动态链接,ACE还使系统的配置和重配置得以自动化。

ACE方面的书籍不是很多,大概也就五六本,想深入研究的话,最好看源代码。想要学好,需要下一番功夫。

 

BOOST的ASIO库

Asio基于Boost开发的异步IO库,封装了Socket,简化基于socket程序的开发,它也是开源、免费,支持跨平台。相对于ACE,asio库就要“亲民”了很多,学习起来也相对容易。asio库基于操作系统提供的异步机制,采用前摄器模式(Proactor)实现可移植的异步(或同步)IO操作,不需要使用多线程和锁,有效避免多线程编程带来的诸多有害副作用(如竞争,死锁)。asio封装了操作系统的select、kqueue、poll/epoll、overlapped I/O等机制,实现异步IO模型。在同步模式下,程序发起一个IO操作,向io_service提交请求,io_service把操作转交给操作系统,同步地等待。当IO操作完成时,操作系统通知io_service,然后io_service再把结果发回给程序,完成整个同步流程。在异步模式下,程序除了要发起IO操作,还要定义一个用于回调的完成处理函数。io_service同样把IO操作转交给操作系统执行,但它不同步等待,而是立即返回。调用io_service的run()成员函数可以等待异步操作完成,当异步操作完成时io_service从操作系统获取结果,在调用handler执行后续逻辑。

 

 

这种依赖操作系统事件的网络库也比较多,另外,整个boost学习起来也没有那么难,只要理解了C++的模板概念,学习起来就容易多了。而且,boost相关的书籍很多,网络上的教程和代码分析也很多,可参考的资料就很丰富了。Asio的用途也相对比较广泛,linux用的比较多。

 

 

Linux下的Muduo库

如果刚开始学习c++网络,建议先从muduo库开始学起。muduo是一个高质量的Reactor网络库,采用one loop per thread + thread pool架构实现,代码简洁,逻辑清晰,是学习网络编程的很好的典范。Muduo也是一个基于事件的非阻塞网络库。书籍和资料也比较多。

 

 

 

Libevent

Libevent不能说是一个c++库,而是一个事件驱动框架,一个用C语言编写的、轻量级的开源高性能事件通知库,他也是跨平台的。有以下特点:事件驱动,高性能;轻量级,专注于网络(相对于ACE);开放源码,代码相当精炼、易读;跨平台,支持Windows、Linux、BSD和Mac OS;支持多种I/O多路复用技术(epoll、poll、dev/poll、select和kqueue等),在不同的操作系统下,做了多路复用模型的抽象,可以选择使用不同的模型,通过事件函数提供服务;支持I/O,定时器和信号等事件;采用Reactor模式;

还有一些其他的网络库,比如libev、libu等,资料也比较多。每种网络库都有自己的优势和劣势,可以根据语言场景选择自己需要的。学习时建议先看些理论的东西,搞懂后再去读一些小型开源网络库的源代码,加深理解。最好自己也写一个小型的网络组件,以后应用起来也更得心应手。

 

转载:http://baijiahao.baidu.com/s?id=1602801918652887575&wfr=spider&for=pc

你可能感兴趣的:(Linux网络编程)