Libevent库笔记(三)服务器和客户端开发的最基本的流程
1.TCP服务端和客户端开发最基本流程
1.1.服务端编程流程
1、创建event_base_new()创建框架上下文对象event base
2、evconnlistener_new_bind分配一个监听器对象,监听给定地址上的TCP连接,通知设置监听回调(当新连接到来时,框架会调用)。
备注:这个函数相当于完成系统调用socket()、bind()、listen(),并设置accept回调函数
(1)在监听回调中通过一个已存在的socket描述符创建socket bufferevent;
(2)设置bufferevent事件的回调函数;
(3)启用/禁用bufferevent相关写缓存区
3、启动事件调度循环event_base_dispatch()
4、根据业务逻辑进行读写操作bufferevent_read() /bufferevent_write()
5、结束则释放相关资源;
1.2.客户端编程流程
1、创建event_base_new()创建框架上下文对象event base
2、使用bufferevent socket new()创建和服务器通讯的bufferevent事件
3、设置bufferevent事件的事件回调函数bufferevent_setcb(),在事件回调体中
(1)判断events事件值为BEV_EVENT_CONNECTED,则进行连接成功的逻辑处理;
(2)判断events事件值为BEV_EVENT_ERROR,则进行连接发生错误的逻辑处理;
4、bufferevent_socket_connect()连接服务器
(1)若直接返回-1,则代表已经出错,进行出错逻辑处理;
(2)如果返回0,则代表几种可能,可能成功,也可能还在握手阶段,具体根据设置的事件回调中进行判断
5、启动事件调度循环event_base_dispatch()
6、根据业务逻辑进行读写操作bufferevent_read() /bufferevent_write()
7、结束则释放相关资源;
1.3.服务端示例代码
参考官方源码包中的hello-world.c。
注释版见地址:
Libevent库笔记(二)样例代码hello-world的注解版本
1.4.客户端编程示例代码
说明:此代码来自于网络文章,太多的文章中使用了此代码,也不知道哪个是原创了。