libevent学习

libevent学习  

1.libevent是什么

libevent是一个轻量级的开源的高性能的事件触发的网络库,适用于windows、linux、bsd等多种平台,内部使用select、epoll、kqueue等系统调用管理事件机制。

其中的关键字:

事件(event):鼠标点击事件,键盘事件,以及处理操作系统的各种事件。所谓事件就是由某个对象发出的消息。比如用户按下了某个按钮,某个文件发生了改变,socket上有数据到达。触发事件的对象称作发送者(sender),捕获事件并且做出响应的对象称作接收者(receiver),一个事件可以存在多个接受者。

事件触发:接收到事件,触发某种操作。

2.特点

事件驱动,高性能;

轻量级,专注于网络(相对于ACE);

开放源码,代码相当精炼、易读;

跨平台,支持Windows、Linux、BSD和Mac OS;

支持多种I/O多路复用技术(epoll、poll、dev/poll、select和kqueue等),在不同的操作系统下,做了多路复用模型的抽象,可以选择使用不同的模型,通过事件函数提供服务;

支持I/O,定时器和信号等事件;

采用Reactor模式;

3.组成部分

事件管理包括各种IO(socket)、定时器、信号等事件,也是libevent应用最广的模块;

缓存管理是指evbuffer功能;

DNS是libevent提供的一个异步DNS查询功能;

HTTP是libevent的一个轻量级http实现,包括服务器和客户端

4.功能

Libevent提供了事件通知,io缓存事件,定时器,超时,异步解析dns,事件驱动的http server以及一个rpc框架。

事件通知:当文件描述符可读可写时将执行回调函数。

Io缓存:缓存事件提供了输入输出缓存,能自动的读入和写入,用户不必直接操作io。

定时器:libevent提供了定时器的机制,能够在一定的时间间隔之后调用回调函数。

信号:触发信号,执行回调。

异步的dns解析:libevent提供了异步解析dns服务器的dns解析函数集。

事件驱动的http服务器:libevent提供了一个简单的,可集成到应用程序中的HTTP服务器。

RPC客户端服务器框架:libevent为创建RPC服务器和客户端创建了一个RPC框架,能自动的封装和解封数据结构。

5.Reactor(反应器)模式

libevent是一个典型的reactor模式的实现。

Reactor模式的基本流程如下:应用程序需要提供相应的接口并且注册到reactor反应器上,如果相应的事件发生的话,那么reactor将自动调用相应的注册的接口函数(类似于回调函数)通知你,所以libevent是事件触发的网络库。

6.例子

    #include <stdio.h> 

    #include <iostream> 

     

    // libevent头文件 

    #include <event.h> 

    using namespace std; 

     

    // 定时事件回调函数 

    void onTime(int sock, short event, void*arg) 

    { 

        cout << "Game Over!"<< endl; 

     

        struct timeval tv; 

        tv.tv_sec = 1; 

        tv.tv_usec = 0; 

        // 重新添加定时事件(定时事件触发后默认自动删除) 

        event_add((struct event*)arg,&tv); 

    } 

     

    int main() 

    { 

        // 初始化 

        event_init(); 

     

        struct event evTime; 

        // 设置定时事件 

        evtimer_set(&evTime, onTime,&evTime); 

        //设置等待时间

        struct timeval tv; 

        tv.tv_sec = 1; 

        tv.tv_usec = 0; 

        // 添加定时事件 

        event_add(&evTime, &tv); 

     

        // 事件循环 

        event_dispatch(); 

     

        return 0; 

    } 

g++ -o mainmain.cpp -levent

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值