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。

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://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

相关文章
|
3月前
|
C++
基于Reactor模型的高性能网络库之地址篇
这段代码定义了一个 InetAddress 类,是 C++ 网络编程中用于封装 IPv4 地址和端口的常见做法。该类的主要作用是方便地表示和操作一个网络地址(IP + 端口)
177 58
|
3月前
|
网络协议 算法 Java
基于Reactor模型的高性能网络库之Tcpserver组件-上层调度器
TcpServer 是一个用于管理 TCP 连接的类,包含成员变量如事件循环(EventLoop)、连接池(ConnectionMap)和回调函数等。其主要功能包括监听新连接、设置线程池、启动服务器及处理连接事件。通过 Acceptor 接收新连接,并使用轮询算法将连接分配给子事件循环(subloop)进行读写操作。调用链从 start() 开始,经由线程池启动和 Acceptor 监听,最终由 TcpConnection 管理具体连接的事件处理。
69 2
|
3月前
基于Reactor模型的高性能网络库之Tcpconnection组件
TcpConnection 由 subLoop 管理 connfd,负责处理具体连接。它封装了连接套接字,通过 Channel 监听可读、可写、关闭、错误等
91 1
|
3月前
|
负载均衡 算法 安全
基于Reactor模式的高性能网络库之线程池组件设计篇
EventLoopThreadPool 是 Reactor 模式中实现“一个主线程 + 多个工作线程”的关键组件,用于高效管理多个 EventLoop 并在多核 CPU 上分担高并发 I/O 压力。通过封装 Thread 类和 EventLoopThread,实现线程创建、管理和事件循环的调度,形成线程池结构。每个 EventLoopThread 管理一个子线程与对应的 EventLoop(subloop),主线程(base loop)通过负载均衡算法将任务派发至各 subloop,从而提升系统性能与并发处理能力。
146 3
|
3月前
基于Reactor模式的高性能网络库github地址
https://github.com/zyi30/reactor-net.git
55 0
|
18天前
|
并行计算 C++ Windows
|
3月前
基于Reactor模型的高性能网络库之Poller(EpollPoller)组件
封装底层 I/O 多路复用机制(如 epoll)的抽象类 Poller,提供统一接口支持多种实现。Poller 是一个抽象基类,定义了 Channel 管理、事件收集等核心功能,并与 EventLoop 绑定。其子类 EPollPoller 实现了基于 epoll 的具体操作,包括事件等待、Channel 更新和删除等。通过工厂方法可创建默认的 Poller 实例,实现多态调用。
209 60
|
3月前
|
安全 调度
基于Reactor模型的高性能网络库之核心调度器:EventLoop组件
它负责:监听事件(如 I/O 可读写、定时器)、分发事件、执行回调、管理事件源 Channel 等。
199 57
|
3月前
基于Reactor模型的高性能网络库之时间篇
是一个用于表示时间戳(精确到微秒)**的简单封装类
139 57
|
3月前
|
缓存 索引
基于Reactor模式的高性能网络库之缓冲区Buffer组件
Buffer 类用于处理 Socket I/O 缓存,负责数据读取、写入及内存管理。通过预分配空间和索引优化,减少内存拷贝与系统调用,提高网络通信效率,适用于 Reactor 模型中的异步非阻塞 IO 处理。
113 3