使用libevent库实现惊人的高并发C++服务器!
libevent编译安装,官网下载安装包并解压。进入解压目录执行:
代码语言:Bash
自动换行
AI代码解释
wget https://github.com/libevent/libevent/releases/download/release-2.1.12-stable/libevent-2.1.12-stable.tar.gz tar -zxvf libevent-2.1.12-stable.tar.gz cd libevent-2.1.12-stable ./configure make sudo make install
三、libevent库的封装层级
3.1、reactor对象封装struct event_base
reactor对象封装为struct event_base;通过:
(1)event_base_new()构造对象。
(2)event_base_free()销毁对象。
3.2、事件对象struct event
事件对象通过struct event的结构体封装使用。
展开
代码语言:C
自动换行
AI代码解释
struct event { struct event_callback ev_evcallback; /* for managing timeouts */ union { TAILQ_ENTRY(event) ev_next_with_common_timeout; int min_heap_idx; } ev_timeout_pos; evutil_socket_t ev_fd; struct event_base *ev_base; union { /* used for io events */ struct { LIST_ENTRY (event) ev_io_next; struct timeval ev_timeout; } ev_io; /* used by signal events */ struct { LIST_ENTRY (event) ev_signal_next; short ev_ncalls; /* Allows deletes in callback */ short *ev_pncalls; } ev_signal; } ev_; short ev_events; short ev_res; /* result passed to event callback */ struct timeval ev_timeout; };
|
变量 |
含义 |
|---|---|
|
ev_evcallback |
回调函数。事件是异步处理的,需要回调函数。 |
|
min_heap_idx |
时间事件的最小堆的索引。 |
|
ev_fd |
定时事件的fd。 |
|
ev_base |
事件对象所属的reactor的对象。 |
|
ev_io |
网络事件关注的事情。 |
|
ev_signal |
信号事件关注的事情。 |
|
ev_timeout |
超时。 |
|
ev_timeout_pos和ev_fd |
定时任务处理的事情。 |
|
ev_events |
具体注册的事件。 |
|
ev_ |
具体的信号。 |
通常,event对象可以自己处理IO。
(1)event_new():构建事件对象、绑定、事件回调。
(2)event_free():销毁事件对象。
bufferevent和evconnlistener对象只需要关注业务逻辑的处理,由libevent内部处理IO操作。
bufferevent是在event对象上面封装的缓冲区。
3.3、struct bufferevent对象
struct bufferevent中的重要成员变量:
|
变量 |
含义 |
|---|---|
|
ev_base |
事件对象所属的reactor的对象。 |
|
be_ops |
bufferevent的具体操作。控制某个事件的打开、关闭、移除等,其中input是用户态读缓冲区,output是用户态写缓冲区 |
|
readcb |
读事件的回调函数 |
|
writecb |
注意不是写事件回调,而是低水平触发的回调函数。这是涉及到写失败时的处理,内部会处理写事件发送出去。通常不需要设置写回调函数。 |
|
errorcb |
所有错误事件的回调函数。被动关闭连接或其他异常的回调函数。 |
|
wm_read |
读水平线,里面分有高水平和低水平。低水平是指buffer中有多少数据就要触发回调,默认为0,即每次读事件都会触发回调;高水平是指缓冲区中达到多大的数据就要关闭读事件,即buffer数据比较多的时候不再处理读事件。 |
|
wm_write |
写水平线,写只有低水平没有高水平。低水平默认值是0,即用户态缓冲区为空时回调写回调函数。 |
struct bufferevent_ops中的重要成员变量:
|
变量 |
含义 |
|---|---|
|
input |
用户态读缓冲区。 |
|
output |
用户态写缓冲区。 |
(1)bufferevent_socket_new():构建bufferevent对象。(2)bufferevent_free():销毁bufferevent对象。
3.4、evconnlistener对象
evconnlistener是专门处理listenfd的对象,使我们不需要关注bind、listen、accept的具体操作。
更多推荐


所有评论(0)