libevent作为一个c网络库具有很好的可移植性。因为他包含了很多可移植的接口封装如linux支持的epoll、select,BSD支持的kqueue,window select等。
学习libevent最好的方式就是阅读源码,首先我们需要看一下libevent的官方网站介绍首先对其有一个了解,介绍是英文写的很好,这里给个链接http://libevent.org/。
看完这个链接后我们其实需要继续学习一下什么叫做异步IO, libevent是这么称呼的,其实IO一共有五种,分别是阻塞IO、非阻塞IO、IO复用、异步IO、信号IO。这个在UNIX网络编程里面都有介绍。libevent这里指的异步IO其实和IO复用是一个意思。我们暂时可以先这样理解。linux里面的异步IO其实调用的诸如aio_read之类的接口,read之后并不直接返回数据,当数据真正被读取后,内核会告诉用户数据已经从内核拷贝到了用户空间。libevent之所以叫做异步IO是因为整个框架是基于事件的注册和响应这个层面来讲的。首先需要将描述符设置为非阻塞状态,然后将它注册对应的事件以及事件回调函数。当事件发生时回调函数开始执行,其实这就是linux下epoll的一个封装,只不过libevent给做的接口更加好用方便而已,这就是我的初步理解啦。
libevent里面讲解它的异步IO的文章在这里,里面讲的很详细,从最开始的阻塞到select再到epoll,再到libevent的详细代码,步步深入,大家学习的时候不妨看看官方给的例子。给个链接。http://www.wangafu.net/~nickm/libevent-book/01_intro.html
后面的开始动手写一个简单的server吧,参考官方的api手册,必要的话可以看下源码哦,加油
版权声明:本文为博主原创文章,未经博主允许不得转载。