在对Libevent有了较清晰的认知之后,下面来实现一个基于Libevent的回射客户/服务器模型,以加深对Libevent机制的理解。
继续阅读“Libevent之回射客户/服务器模型实现”
分类:Libevent
Libevent之evconnlistener篇
Libevent还提供了一套用于监听和接收TCP连接的封装。使用evconnlistener机制,你可以快速的创建一个监听套接字,而不必再像通常那样(socket()==》bind()==》listen())完成监听套接字的创建。
继续阅读“Libevent之evconnlistener篇”
Libevent之evbuffer篇
Libevent的evbuffer结构实现了一个字节队列,它从队列的尾部添加数据,头部删除数据。evbuffer通常用于管理网络IO的“缓冲区”,它不提供调度IO或当IO就绪时触发IO的功能,这是bufferevent干的事情。evbuffer定义如下:
继续阅读“Libevent之evbuffer篇”
Libevent之bufferevent篇
通常情况下,应用程序除了需要对事件做出相应的响应之外,还需要执行一些数据读写操作。比如,当我们需要写数据时:首先将数据放入缓冲区中==>等待该连接可写==>尽可能多的向连接中写入数据,并记录写入了多少数据==>如果没有写完,则等待连接再次可写时,继续写入。
继续阅读“Libevent之bufferevent篇”
Libevent之event篇
事件event是Libevent的基本操作单元,它包含了一系列条件(如文件描述符可读或可写、超时、信号等等),一旦触发了某个条件之后,该事件就会被激活,随后执行相应的回调函数。
继续阅读“Libevent之event篇”
Libevent之事件循环篇
创建了event_base对象,并且注册了一些事件之后,我们就希望Libevent可以在某个或某些事件被激活的时候能够及时的通知我们。
继续阅读“Libevent之事件循环篇”
Libevent之event_base篇
使用Libevent库函数进行编程时,我们一般需要先分配一个或多个event_base结构体。每一个event_base都包含了一组事件,并且通过轮询确定哪些事件是激活的。
继续阅读“Libevent之event_base篇”
Libevent之辅助函数及类型篇
Libevent在头文件<event2/util.h>中定义了一系列辅助类型和辅助函数,它们至少带来了两个方面的优势:一方面,使用户不需要过多关注细节,提高开发效率;另一个方面,解决平台间的差异性,为跨平台做出一定贡献。
继续阅读“Libevent之辅助函数及类型篇”
Libevent前篇之异步IO
如果一个IO调用不是在调用它之后立即返回,而是在它完成了所有操作或者超时之后才返回,那么它就是一个典型的同步IO。比如,客户端通过调用connect()函数向服务端发起TCP连接请求时,只有当双方完成了三次握手或者超时之后,connect()函数才会返回。
继续阅读“Libevent前篇之异步IO”