天天看点

c++网络库调研

C++ 网络库 Network Library TCP Server

<a href="http://blog.csdn.net/langeldep/article/details/6976120">开源C/C++网络库比较</a>

<a href="http://blog.csdn.net/langeldep/article/details/6976120">http://blog.csdn.net/langeldep/article/details/6976120</a>

在开源的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下面运行,那用这个库也是可以的。

<a href="http://blog.csdn.net/solstice/article/category/779646">http://blog.csdn.net/solstice/article/category/779646</a>

<a href="http://code.google.com/p/muduo/">http://code.google.com/p/muduo/</a>

<a href="http://blog.csdn.net/zhangxinrun/article/details/5914100">http://blog.csdn.net/zhangxinrun/article/details/5914100</a>

POCO的优点:

1) 比boost更好的线程库,特别是一个活动的方法的实现,并且还可设置线程的优先级。

2) 比 boost:asio更全面的网络库。但是boost:asio也是一个非常好的网络库。

3) 包含了一些Boost所不包含的功能,像XML,数据库接口等。

4) 跟Boost相比,集成度更高,是更加统一的一个库。

5) Poco的c++代码更清洁,现代和易理解。对不是模板编程专家的人来说,POCO的代码比大多数Boost库容易理解得多

6) 可以在许多平台上使用

POCO的缺点:

1) 文档有限。但这一定程度上是因为代码的容易理解。

2) 跟Boost相比用户社群小得多。

3) 有多少能集成进C++标准是个问题。而Boost在这方面不是个问题。

许多POCO的用户把POCO和Boost一起并用。

Boost是高质量的库,但它不是个框架。

Boost:asio处理高并发的效率还可以。单连接吞吐稍微弱点。 如果选用,最好封装好,别让boost代码吞噬你的代码,那样最后不可收拾。呵呵。

asio在windows下效率是最好的。基本接近自己在iocp上开发的效率。在linux下,他默认选用epoll, 但中间为了做了层stream cache, 效率稍有损失。而且他的epoll规则用的不太合理,可以自己修改他的代码,达到自己的需求。

在freebsd下,他默认是select的,要自己修改他的代码条件编译,才可以支持kqueue

<a href="http://www.cppblog.com/richbirdandy/archive/2010/09/10/123994.html">http://www.cppblog.com/richbirdandy/archive/2010/09/10/123994.html</a>

<a href="http://stackoverflow.com/questions/992069/ace-vs-boost-vs-poco">http://stackoverflow.com/questions/992069/ace-vs-boost-vs-poco</a>

<a href="http://stackoverflow.com/questions/474840/boost-vs-ace-c-cross-platform-performance-comparison">http://stackoverflow.com/questions/474840/boost-vs-ace-c-cross-platform-performance-comparison</a>

Boost.Asio和ACE之间关于Socket编程的比较

<a href="http://blog.csdn.net/summerhust/article/details/6595321">http://blog.csdn.net/summerhust/article/details/6595321</a>

基于 Google protobuf 的 webgame 网络协议设计

<a href="http://www.slideshare.net/laiyonghao/google-protobuf-webgame">http://www.slideshare.net/laiyonghao/google-protobuf-webgame</a>

<a href="http://zzk.cnblogs.com/s?w=blog%3ASolstice%20protobuf%20">http://zzk.cnblogs.com/s?w=blog%3ASolstice%20protobuf%20</a>

<a href="http://www.infoq.com/cn/news/2011/05/sl-data-exchange-protocol">软件系统开发中的数据交换协议</a>

<a href="http://www.infoq.com/cn/news/2011/05/sl-data-exchange-protocol">http://www.infoq.com/cn/news/2011/05/sl-data-exchange-protocol</a>

<a href="http://webservices.ctocio.com.cn/354/12203854.shtml">http://webservices.ctocio.com.cn/354/12203854.shtml</a>

<a href="http://blog.csdn.net/yuyin86/article/details/6562611">http://blog.csdn.net/yuyin86/article/details/6562611</a>

<a href="http://www.kuqin.com/system-analysis/20080614/9506.html">服务器设计和开发的体会</a>

<a href="http://www.kuqin.com/system-analysis/20080614/9506.html">http://www.kuqin.com/system-analysis/20080614/9506.html</a>

<a href="http://www.cplusplus.com/">http://www.cplusplus.com/</a>

<a href="http://www.oschina.net/project/tag/145/networklib?lang=0&amp;os=0&amp;sort=view">http://www.oschina.net/project/tag/145/networklib?lang=0&amp;os=0&amp;sort=view</a>