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. Java中关于String的split(String regex, int limit) 方法

    今天在对一个String对象进行拆分的时候,总是无法到达预计的结果.呈现数据的时候出现异常,后来debug之后才发现,错误出在String spilt上,于是开始好好研究下这东西,开始对api里的sp ...

  2. Google Noto Sans CJK 字体

    下载链接:https://code.google.com/p/noto/source/browse/third_party/noto_cjk 等自己安装完成,再来个体验说明.

  3. Sicily 1931. 卡片游戏

    题目地址:1931. 卡片游戏 思路: 纯属数据结构中队列的应用,可以练练手. 具体代码如下: #include <iostream> #include <queue> usi ...

  4. 常见MYSQL导入导出数据命令

    导出数据库: mysqldump –uuser -ppassword -hhost databasename > target_20150225.sql 打包: tar zcvf target_ ...

  5. 在什么情况下使用struct,struct与class的区别

    Struct定义和使用 类是引用类型,是保存在托管堆中的.通过定义类,我们可以在数据的生存期上得到很高的灵活性,但是也会让程序的性能有一定的损失.虽然这种损失很小,但当我们只需要定义一个很小的结构时, ...

  6. 大型分布式C++框架《四:netio之请求包中转站 上》

    本来一篇文章就该搞定的.结果要分上下篇了.主要是最近颈椎很不舒服.同时还在做秒杀的需求也挺忙的. 现在不能久坐.看代码的时间变少了.然后还买了两本治疗颈椎的书.在学着,不过感觉没啥用.突然心里好害怕. ...

  7. 如何解决ajax跨域问题

    如何解决ajax跨域问题(转) 由 于此前很少写前端的代码(哈哈,不合格的程序员啊),最近项目中用到json作为系统间交互的手段,自然就伴随着众多ajax请求,随之而来的就是要解决 ajax的跨域问题 ...

  8. Scala-数组

    package com.mengyao.scala.function /** * Scala中数组的声明和使用(定长数组和变长数组) *  * @author mengyao */object Tes ...

  9. Swing UI - 可收起与开展内容面板实现演示

    基于JAVA Swing实现的自定义组件可折叠的JPanel组件 基本思想: 可折叠面板,分为两个部分-头部面板与内容面板 头部面板– 显示标题,以及对应的icon图标,监听鼠标事件决定内容面板隐藏或 ...

  10. MyBatis的简单操作

    这里将的是简单的增.删.改.查等基本操作 首先创建java项目,导入相应的依赖包,这里可以参考上一篇博客 1.添加数据 在jike.book.pojo包中,新建java类 JiKeUser.java: ...