c++网络库调研

简介: 搜索关键词 C++ 网络库 Network Library TCP Server 网络库总结 开源C/C++网络库比较 http://blog.csdn.net/langeldep/article/details/6976120 在开源的C/C++网络库中,常用的就那么几个,在业界知名度最高的,应该是ACE了,不过是个重量级的大家伙,轻量级的有libevent, libev,还有 Boost的ASIO。

搜索关键词

C++ 网络库 Network Library TCP Server

网络库总结

开源C/C++网络库比较

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.cplusplus.com/

http://www.oschina.net/project/tag/145/networklib?lang=0&os=0&sort=view

相关文章
|
10天前
|
存储 C++ 容器
C++STL(标准模板库)处理学习应用案例
【4月更文挑战第8天】使用C++ STL,通过`std:vector`存储整数数组 `{5, 3, 1, 4, 2}`,然后利用`std::sort`进行排序,输出排序后序列:`std:vector<int> numbers; numbers = {5, 3, 1, 4, 2}; std:sort(numbers.begin(), numbers.end()); for (int number : numbers) { std::cout << number << " "; }`
17 2
|
23天前
|
算法 编译器 C语言
【C++ 异常】C++ 标准库异常类及其应用
【C++ 异常】C++ 标准库异常类及其应用
16 0
|
6天前
|
存储 算法 Linux
【实战项目】网络编程:在Linux环境下基于opencv和socket的人脸识别系统--C++实现
【实战项目】网络编程:在Linux环境下基于opencv和socket的人脸识别系统--C++实现
20 6
|
23天前
|
存储 JSON 安全
【C++ JSON库 json值的创建手段】深入探究C++中JSON对象定位与操作:从引用到回调函数
【C++ JSON库 json值的创建手段】深入探究C++中JSON对象定位与操作:从引用到回调函数
60 0
|
8天前
|
数据采集 大数据 数据安全/隐私保护
掌握网络抓取技术:利用RobotRules库的Perl下载器一览小红书的世界
本文探讨了使用Perl和RobotRules库在遵循robots.txt规则下抓取小红书数据的方法。通过分析小红书的robots.txt文件,配合亿牛云爬虫代理隐藏真实IP,以及实现多线程抓取,提高了数据采集效率。示例代码展示了如何创建一个尊重网站规则的数据下载器,并强调了代理IP稳定性和抓取频率控制的重要性。
掌握网络抓取技术:利用RobotRules库的Perl下载器一览小红书的世界
|
22天前
|
缓存 算法 C语言
【C++ 标准查找算法 】C++标准库查找算法深入解析(In-depth Analysis of C++ Standard Library Search Algorithms)
【C++ 标准查找算法 】C++标准库查找算法深入解析(In-depth Analysis of C++ Standard Library Search Algorithms)
45 0
|
23天前
|
Linux C++ iOS开发
【C++ 17 新特性 文件管理】探索C++ Filesystem库:文件和目录操作的全面指南(二)
【C++ 17 新特性 文件管理】探索C++ Filesystem库:文件和目录操作的全面指南
237 2
|
23天前
|
Linux API C++
【C++ 17 新特性 文件管理】探索C++ Filesystem库:文件和目录操作的全面指南(一)
【C++ 17 新特性 文件管理】探索C++ Filesystem库:文件和目录操作的全面指南
291 2
|
24天前
|
存储 缓存 C语言
【C/C++ 库的动态链接】深入理解动态链接器:RPATH, RUNPATH与$ORIGIN
【C/C++ 库的动态链接】深入理解动态链接器:RPATH, RUNPATH与$ORIGIN
62 0
|
3天前
|
数据采集 API 数据安全/隐私保护
畅游网络:构建C++网络爬虫的指南
本文介绍如何使用C++和cpprestsdk库构建高效网络爬虫,以抓取知乎热点信息。通过亿牛云爬虫代理服务解决IP限制问题,利用多线程提升数据采集速度。示例代码展示如何配置代理、发送HTTP请求及处理响应,实现多线程抓取。注意替换有效代理服务器参数,并处理异常。
畅游网络:构建C++网络爬虫的指南