开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 30 天,点击查看活动详情。
一、libevent库
开源。精简。跨平台(Windows、Linux、maxos、unix)。专注于网络通信。
-
源码包安装: 参考 README、readme
./configure 检查安装环境 生成 makefile
make 生成 .o 和 可执行文件
sudo make install 将必要的资源cp置系统指定目录。
进入 sample 目录,运行demo验证库安装使用情况。
编译使用库的 .c 时,需要加 -levent 选项。
库名 libevent.so --> /usr/local/lib 查看的到。
-
特性:
基于“事件”异步通信模型。--- 回调。
二、libevent框架
-
创建 event_base (乐高底座)
struct event_base *event_base_new(void); struct event_base *base = event_base_new();
-
创建 事件evnet
常规事件 event --> event_new(); bufferevent --> bufferevent_socket_new();
-
将事件 添加到 base上
int event_add(struct event *ev, const struct timeval *tv)
-
循环监听事件满足
int event_base_dispatch(struct event_base *base); event_base_dispatch(base);
-
释放 event_base
event_base_free(base);
三、事件
-
创建事件event
struct event *ev; struct event *event_new(struct event_base *base,evutil_socket_t fd,short what,event_callback_fn cb; void *arg); base: event_base_new()返回值。 fd: 绑定到 event 上的 文件描述符 what:对应的事件(r、w、e) EV_READ 一次 读事件 EV_WRTIE 一次 写事件 EV_PERSIST 持续触发。 结合 event_base_dispatch 函数使用,生效。 cb:一旦事件满足监听条件,回调的函数。 typedef void (*event_callback_fn)(evutil_socket_t fd, short, void *) arg: 回调的函数的参数。 返回值:成功创建的 event
-
添加事件到 event_base
int event_add(struct event *ev, const struct timeval *tv); ev: event_new() 的返回值。 tv:NULL
-
从event_base上摘下事件 【了解】
int event_del(struct event *ev); ev: event_new() 的返回值。
-
销毁事件
int event_free(struct event *ev); ev: event_new() 的返回值。
四、未决和非未决
非未决: 没有资格被处理
未决: 有资格被处理,但尚未被处理
event_new --> event ---> 非未决 --> event_add --> 未决 --> dispatch() && 监听事件被触发 --> 激活态 --> 执行回调函数 --> 处理态 --> 非未决 event_add && EV_PERSIST --> 未决 --> event_del --> 非未决
事件的未决--非未决状态转换
五、数据传输协议
-
请求协议: --- 浏览器组织,发送
- GET /hello.c Http1.1\r\n
- Host: localhost:2222\r\n
- User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:24.0) Gecko/201001 01 Firefox/24.0\r\n
- Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8\r\n
- Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3\r\n
- Accept-Encoding: gzip, deflate\r\n
- Connection: keep-alive\r\n
- If-Modified-Since: Fri, 18 Jul 2014 08:36:36 GMT\r\n
【空行】\r\n
-
应答协议:
-
Http1.1 200 OK
-
Server: xhttpd Content-Type:text/plain; charset=iso-8859-1
-
Date: Fri, 18 Jul 2014 14:34:26 GMT
-
Content-Length: 32 ( 要么不写 或者 传-1, 要写务必精确 ! )
-
Content-Language: zh-CN
-
Last-Modified: Fri, 18 Jul 2014 08:36:36 GMT
-
Connection: close
\r\n
[数据起始。。。。。。。。。。。。数据终止]
-