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手冊。必要的话能够看下源代码哦,加油