码迷,mamicode.com
首页 > 其他好文 > 详细

libevent学习二

时间:2015-01-20 22:22:59      阅读:174      评论:0      收藏:0      [点我收藏+]

标签:libevent   linux   pthread   

Libevent库是用来开发高效,可移植的非阻塞IO。它的设计目标

1. 可移植性

2. 高效性:Libevent试图使用每个平台上的最高效的非阻塞IO的实现

3. 可扩展性:Libevent被设计成,即使程序需要去处理上万条活跃的socket也能运行良好。

4. 方便性:不管在什么情况下,用最正常的方式去用libevent写一个程序,都可能稳定,可移植。


Libevent库包含以下几个模块

1. evutil:通用的功能,已经抽象出不同平台之间的差异。

2. event和event_base:相当于libevent的心脏。为各个平台的基于事件的非阻塞IO提供了一个统一的接口。当socket准备好读或写,或发生超时,或当有系统信号抵达,它都会通知你。

3. bufferevent:这些方法为libevent的event-based核心提供了更方便的包装。它让你主动去请求已缓冲的读和写,而不是当IO发生时,才去通知你这些已经准备好了。

bufferevent接口也可以有多个后端,所以它可以充分发挥系统的优势,提供更高效的非阻塞IO,就像Windows的IOCP接口。

4. evbuffer:这个模块实现的是bufferevent下面的buffer,提供了可方便,高效访问的方法。

5. evhttp:简单的HTTP客户端、服务器的实现。

6. evdns:简单的DNS客户端、服务器的实现。

7. evrpc:简单的RPC实现。


当Libevent被构建时,默认的它需要安装以下几个类库

1. libevent_core:所有的核心event和buffer相关方法。包括所有的event_base,evbuffer,bufferevent,还有通用方法。

2. libevent_extra:定义了协议相关的方法。在你的代码里可能需要用到,包括HTTP,DNS,RPC。

3. libevent:历史遗漏,不应该使用。在将来的版本中可能会被去掉。

下面的库可能在某些平台上用到:

1. libevent_pthreads:在pthread的可移植线程库的基础上增加了线程和锁的实现。它跟libevent_core是分开的,如果你不使用多线程的方式使用libevent,你不需要去链接pthread库。

2. libevent_openssl:这个库通过封装bufferevents和OpenSSL库,提供了对加密链接的支持。它跟libevent_core也是分开的,如果你不使用加密链接,就不需要去链接OpenSSL库。


头文件

目前所有的公共头文件都在event2目录下。头文件被分为三大类:

1. API头文件:定义了Libevent的公共接口。这些头文件没有特殊后缀。

2. 兼容性头文件:包含了一些已经废弃的方法。如果不是从一个旧版本移植程序,不建议包含它。

3. 结构体头文件:定义了结构体。其中一些是用来快速访问的,还有一些是由于历史原因被暴露出来。有了这些结构体的定义,你可以方便的调试。这些头文件带有后缀"_struct.h"。

libevent学习二

标签:libevent   linux   pthread   

原文地址:http://blog.csdn.net/huanzai2/article/details/42920215

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!