高性能 I/O 框架库 libevent
Libevent 是一个高性能、跨平台的 C 语言网络库。
Libevent 是一款高性能的开源 I/O 框架库,具有如下特点:
- 跨平台支持
- 统一事件源
- 线程安全
- 基于 Reactor 模式的实现
Libevent 是基于 Reactor 模式的网络库,在 Reactor 模式中,通常都有一个事件循环(Event Loop),在 Libevent 中,这个事件循环就是 event_base
结构体:
struct event_base *event_base_new(void); // 创建事件循环
void event_base_free(struct event_base *base); // 销毁事件循环
int event_base_dispatch(struct event_base *base); // 运行事件循环
示例
Hello World
下面是用 libevent 库实现的一个 "Hello World" 程序。
#include <sys/signal.h>
#include <event2/event.h>
void signal_cb(int fd, short event, void *argc)
{
struct event_base* base = (event_base*)argc;
struct timeval delay = {2, 0};
printf("Caught an interrupt signal; exiting cleanly in two seconds....\n");
event_base_loopexit(base, &delay);
}
void timeout_cb(int fd, short event, void* argc)
{
printf("timeout\n");
}
int main(int argc, char const *argv[])
{
struct event_base* base = event_base_new();
struct event* signal_event = evsignal_new(base, SIGINT, signal_cb, base);
event_add(signal_event, NULL);
timeval tv = {1, 0};
struct event* timeout_event = evtimer_new(base, timeout_cb, NULL);
event_add(timeout_event, &tv);
event_base_dispatch(base);
event_free(timeout_event);
event_free(signal_event);
event_base_free(base);
return 0;
}