C/C++网络库

ACE:

参考:https://blog.csdn.net/solstice/article/details/5364096 注:篇博文的作者是陈硕,正是下面介绍的muduo项目的作者。

BOOST.ASIO:Proactor模型

网址:http://think-async.com/Asio

中文网址:https://mmoaay.gitbooks.io/boost-asio-cpp-network-programming-chinese/content/

    优点:跨平台,支持回调函数组合,封装成一个对外的异步调用。可以实现Zero-copy。和线程解耦,长时间执行的过程,总是有系统异步完成,程序无需为此新建线程。

    缺点:内存占用比较大,相对于Reactor模式,需要先分配内存,后处理IO,Reactor是先等待IO,后分配内存,因此,Proactor有Zero-copy,内存已经分配好,系统可以直接将接收的网络数据从网络接口转给应用程序内存,而不需要中转内存。

    ASIO的内核是io_service脱胎于IO,是宇宙级异步模型,共有三步:

    1。发起 按照  asio 的编码规范,所有的发起操作都使用 async_ 前缀,使用 async_动词 的形式作为函数名。

    2。执行 异步过程在发起的时候被executor执行(系统可以是支持 AIO 的内核,不支持 AIO 的系统则是 aiso 用户层模拟)

    3。完成并回调 在发起 async_* 操作的时候,总是携带一个回调的闭包。asio使用闭包作为异步事件完成的处理回调,没而不是C式的回调函数。asio的宇宙异步模型里,回调总是在执行 io_service::run 的线程里执行。asio绝不会在内部线程里调用回调。

参考:https://blog.csdn.net/wojiuguowei/article/details/78838706

 

Muduo:Reactor模型。

项目地址:https://github.com/chenshuo/muduo

    基于事件的非阻塞网络库。这个库只是针对linux平台的。适合初学者。

    目前的实例有很多:360的开源网络项目就是深度参考Muduo。

参考:https://blog.csdn.net/solstice/article/category/779646 注:项目作者本人的CSDN

参考书籍:《Linux多线程服务端编程:使用muduo C++网络库》

 

Libevent:

项目地址:http://libevent.org/

C语言编写的轻量级事件驱动开源网络库。支持Linux,Windows,Mac OS。

参考:https://www.cnblogs.com/nearmeng/p/4043548.html

目前的项目实例:memcached

Libev

相对于libevent而言,更简练,性能更好,window支持不好。

Libuv

项目地址:http://docs.libuv.org/en/v1.x/

高性能,事件驱动的IO库。是对libev的封装,使之能支持windows。linux系统下使用libev,window系统下使用IOCP

项目实例:node.js

以上三个类库的比较参考:https://blog.csdn.net/lijinqi1987/article/details/71214974

LibCurl

项目地址:https://curl.haxx.se/libcurl/

免费的轻量级的客户端网络库。

 

参考:https://www.cnblogs.com/nanzhi/p/8492288.html

你可能感兴趣的:(C/C++)