搜索關鍵詞
C++ 網絡庫 Network Library TCP Server
網絡庫總結
http://blog.csdn.net/langeldep/article/details/6976120
在開源的C/C++網絡庫中,常用的就那么幾個,在業界知名度最高的,應該是ACE了,不過是個重量級的大家伙,輕量級的有libevent, libev,還有 Boost的ASIO。
ACEhttp://www.cs.wustl.edu/~schmidt/ACE.html
ACE是一個大型的中間件產品,代碼20萬行左右,過於宏大,一堆的設計模式,架構了一層又一層,使用的時候,要根據情況,看你從那一層來進行使用。支持跨平台。
ASIOhttp://think-async.com/
Boost的ASIO是一個異步IO庫,封裝了對Socket的常用操作,簡化了基於socket程序的開發。支持跨平台。
libevent
libevent是一個C語言寫的網絡庫,官方主要支持的是類linux 操作系統,最新的版本添加了對windows的IOCP的支持。由於IOCP是異步IO,與linux下的POLL模型,EPOLL模型,還有freebsd的KQUEUE等這些同步模型在用法上完全不一致,所以使用方法也不一樣,就好比ACE中的Reactor和Proactor模式一樣,使用起來需要轉變思路。如果對性能沒有特別的要求,那么使用libevent中的select模型來實現跨平台的操作, select模型可以橫跨windows, linux, unix,solaris等系統。
libev
libev是一個C語言寫的,只支持linux系統的庫,我以前研究的時候只封裝了EPOLL模型,不知道現在的新版有沒有改進。使用方法類似libevent,但是非常簡潔,代碼量是最少的一個庫,也就幾千行代碼。顯然這樣的代碼跨平台肯定是無法支持的了,如果你只需要在linux下面運行,那用這個庫也是可以的。
Muduohttp://code.google.com/p/muduo/
http://blog.csdn.net/solstice/article/category/779646
http://code.google.com/p/muduo/
POCOhttp://pocoproject.org/
http://blog.csdn.net/zhangxinrun/article/details/5914100
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
http://www.cppblog.com/richbirdandy/archive/2010/09/10/123994.html
比較
http://stackoverflow.com/questions/992069/ace-vs-boost-vs-poco
http://stackoverflow.com/questions/474840/boost-vs-ace-c-cross-platform-performance-comparison
Boost.Asio和ACE之間關於Socket編程的比較
http://blog.csdn.net/summerhust/article/details/6595321
信息交換協議
基於 Google protobuf 的 webgame 網絡協議設計
http://www.slideshare.net/laiyonghao/google-protobuf-webgame
http://zzk.cnblogs.com/s?w=blog%3ASolstice%20protobuf%20
http://www.infoq.com/cn/news/2011/05/sl-data-exchange-protocol
參考資料
http://webservices.ctocio.com.cn/354/12203854.shtml
http://blog.csdn.net/yuyin86/article/details/6562611
http://www.kuqin.com/system-analysis/20080614/9506.html
http://www.oschina.net/project/tag/145/networklib?lang=0&os=0&sort=view