libevent是什么 
     
        libevent 库实际上没有更换 select()poll() 或其他机制的基础。而是使用对于每个平台最高效的高性能解决方案在实现外加上一个包装器。
        为了实际处理每个请求,libevent 库提供一种事件机制,它作为底层网络后端的包装器。事件系统让为连接添加处理函数变得非常简便,同时降低了底层 I/O 复杂性。这是 libevent 系统的核心。
        通俗的说,libevent是select、poll、epoll等机制的一种封装,使网络编程更方便、减低网络编程的复杂性。
 
        libevent有以下特点:
        可移植性:
        使用libevent库编写的程序可以运行在所有支持libevent的平台,即时是在不支持非阻塞IO的平台上,libevent库也可以支持一般的IO工作方法。
        高效:
        使用libevent库编写的程序会使用每个平台最高效的非阻塞IO模型,而不是引入过多的其他的IO机制。
        伸缩性强:
        使用libevent库编写的程序可以处理大量的网络连接。
        便捷性:
        libevent是对底层IO机制的封装,可以编写统一的程序,降低IO程序编写的复杂性。
 
怎么使用libevent
        
        libevent总体API调用过程如下:
        (1)event_base_new()  //初始化一个event_base
        (2)event_set()  //初始化一个event(事件)结构体,设置事件的文件描述符、事件类型(读IO事件或者写IO事件等)、事件被触发后的回调函数、回调函数的参数
        (3)event_base_set()  //给事件设置相应的event_base
        (4)event_add()  //把事件添加到队列(就绪队列、active队列等),队列由event对应的event_base管理
        (5)event_base_dispatch()  //启动轮询
 
        event_base和event是一对多的关系,一个event_base管理着多个event。
 int main()
{ int serFd;
struct sockaddr_in serAddr; memset(&serAddr, , sizeof(serAddr));
serAddr.sin_family = AF_INET;
serAddr.sin_addr.s_addr = inet_addr("127.0.0.1");
serAddr.sin_port = htons(); serFd = socket(AF_INET, SOCK_STREAM, );
bind(serFd, (struct sockaddr*)&serAddr, sizeof(serAddr));
listen(serFd, ); //初始化一个event_base
base = event_base_new(); struct event listenEvent; //初始化一个event(事件)结构体,设置事件的文件描述符、事件类型(读IO事件或者写IO事件等)、
//事件被触发后的回调函数onAccept【该函数需要我们自己实现】、回调函数的参数
//EV_PERSIST表示事件的回调函数执行完后,不会把事件listenEvent从base中移除
event_set(&listenEvent, serFd, EV_READ|EV_PERSIST, onAccept, NULL); //给listenEvent事件设置相应的event_base
event_base_set(base, &listenEvent); //把事件添加到队列(就绪队列、active队列等),队列由event对应的event_base管理
event_add(&listenEvent, NULL); //启动轮询
event_base_dispatch(base); return ;
}

    回调函数:

 //回调函数包含三个参数
//参数1:事件对应的文件描述符
//参数2:事件对应的行为 EV_READ|EV_PERSIST
//参数3:在event_set函数传入的参数的指针
void onAccept(int serFd, short iEvent, void *arg)
{
//listenEvent事件的回调函数
}
 

libevent入门(1)的更多相关文章

  1. libevent入门教程

    首先给出官方文档吧: http://libevent.org ,首页有个Programming with Libevent,里面是一节一节的介绍libevent,但是感觉信息量太大了,而且还是英文的- ...

  2. libevent入门

    Libevent API =============================== evtimer_new evtimer_new(base, callback, NULL) 用来做定时器,即当 ...

  3. libevent入门介绍

    libevent是之前看到的一个别人推荐的清凉级网络库,我就想了解一下它.今天下载到了一个人写的剖析系列,从结构和源码方面进行了简要分析.只是这个分析文章是2010年的,有点过时了(跟现在的libev ...

  4. [z]libevent入门教程:Echo Server based on libevent 不指定

    [z]https://www.felix021.com/blog/read.php?2068 花了两天的时间在libevent上,想总结下,就以写简单tutorial的方式吧,貌似没有一篇简单的说明, ...

  5. libevent 入门教程:Echo Server based on libevent(转)

    下面假定已经学习过基本的socket编程(socket, bind, listen, accept, connect, recv, send, close),并且对异步/callback有基本的认识. ...

  6. 【VS开发】【数据库开发】libevent入门

    花了两天的时间在libevent上,想总结下,就以写简单tutorial的方式吧,貌似没有一篇简单的说明,让人马上就能上手用的.首先给出官方文档吧: http://libevent.org ,首页有个 ...

  7. [原]我在Windows环境下的首个Libevent测试实例

    libevent对Windows环境也有很好的支持,不过初次学习和编译libevent简单实例,总是有一些陌生感的,只有成功编译并测试了一个实例,才会有恍然大悟的感觉.下面将要讲到的一个实例是我从网上 ...

  8. 轻量级网络库libevent初探

    本文是关于libevent库第一篇博文,主要由例子来说明如何利用该库.后续博文再深入研究该库原理. libevent库简介 就如libevent官网上所写的“libevent - an event n ...

  9. C++日志操作开源函数库之Google-glog

    今天想给我的C++项目找一个开源的日志类,用于记录系统日志,结果浪费了半个下午的时间.从网上搜索相关资料,找到以下几个备选方案: 1.log4cplus 下载地址:http://sourceforge ...

随机推荐

  1. Golang http包下FileServer的使用

    FileServer文档:https://godoc.org/net/http#FileServer 今天看到http的 Handle 方法,所以就像试试,就找到FileServer FileServ ...

  2. 转:enum与typedef enum的用法

    来自:http://blog.sina.com.cn/s/blog_817a5eb6010146ad.html 作者:于超峰 在程序中,可能需要为某些整数定义一个别名,我们可以利用预处理指令#defi ...

  3. 为何某些公司不允许使用C++ STL?

    说几个STL的缺点吧,虽然都是在比较极端的情况下出现,但是对于一些大项目还是会遇到的 1. 代码膨胀问题每一个实例化过的模板类,都会膨胀出一份独立的代码,比如std::vector<std::s ...

  4. BZOJ3479: [Usaco2014 Mar]Watering the Fields

    3479: [Usaco2014 Mar]Watering the Fields Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 81  Solved: ...

  5. hdu 4277 USACO ORZ(dfs+剪枝)

    Problem Description Like everyone, cows enjoy variety. Their current fancy is new shapes for pasture ...

  6. JS截取字符串方法

    function textSubstr(str,sub_length){ str = str.trim(); var temp1 = str.replace(/[^\x00-\xff]/g," ...

  7. MVC 4.0语法 自动分页

    4.0语法中实现自动分页只需要两个方法即可,Skip() ----跳过序列中指定的元素,Take()-----从序列的开头返回指定数量元素. 一般用自动分页都是无刷新的,可以把显示的数据,用局部页面封 ...

  8. js基础例子动态创建table实例

    <style> table{ width:500px; font-weight: bold; border: 1px solid #000; border-collapse:collaps ...

  9. OpenCV中OpenCL模块函数

    It currently develop and test on GPU devices only. This includes both discrete GPUs(NVidia,AMD), as ...

  10. Swift学习——A Swift Tour 函数

    Functions and Closures  函数和封闭性(闭包) Functions  函数的使用 Swift中的函数定义和OC中有明显的差别了,使用func定义函数,在括号里定义參数和类型,用 ...