zoukankan      html  css  js  c++  java
  • libevent库简单使用

    一、libevent库简介

    Libevent是一个用于开发可扩展性网络服务器的基于事件驱动(event-driven)模型的网络库。Libevent有几个显著的亮点: 
    (1)事件驱动(event-driven),高性能;
    (2)轻量级,专注于网络,不如 ACE 那么臃肿庞大; 
    (3)源代码相当精炼、易读; 
    (4)跨平台,支持 Windows、Linux、*BSD和 Mac Os; 
    (5)支持多种 I/O多路复用技术, epoll、poll、dev/poll、select 和kqueue 等; 
    (6)支持 I/O,定时器和信号等事件; 
    (7)注册事件优先级; 
     Libevent 已经被广泛的应用,作为底层的网络库;比如 memcached、 Vomi t、 Nylon、 Netchat等等。

    以上来自百度百科:

    二、libevent简单使用

    libevent有以下几个主要函数:

    (1)初始化libevent库

    1 struct event_base * event_init(void) /*初始化libevent库, 返回一个struct event_base 指针*/
    2 
    3 struct event_base * event_base_new(void) /*同样是初始化libevent库,官方后出的用来替代evnet_init()的*/
    4 //区别就是前者是线程安全的、而后者是非线程安全的,后者在其官方说明中已经被标志为过时的函数、且建议用前者代替

    (2)初始化事件ev,设置回调函数和关注的事件

    1 void event_set(struct event *ev, int fd, short event, void (*cb)(int, short, void *), void *arg) /*初始化事件,并且设置回调函数和关注的事件*/
    2 /*
    3 ev:    执行要初始化的 event 对象;
    4 fd:    该 event 绑定的“句柄”,对于信号事件,它就是关注的信号;
    5 event:在该 fd 上关注的事件类型,它可以是 EV_READ, EV_WRITE, EV_SIGNAL;
    6 cb:    这是一个函数指针,当 fd 上的事件 event 发生时,调用该函数执行处理,它有三个参数,
    7     调用时由 event_base 负责传入,按顺序,实际上就是 event_set 时的 fd, event 和 arg;
    8 arg:    传递给 cb 函数指针的参数*/
    9     

    (3)设置event所属的event_base

    1 event_base_set(base, &ev);
    2 
    3 //指明 event 要注册到哪个 event_base 实例上

    (4)event_add添加事件

    1 event_add(&ev, timeout);
    2 //添加事件并设置超时时间

    (5)event_base_dispatch循环等待就绪事件并处理

    1 event_base_dispatch(base);

     未完待续。。。。。。。。。。。。。。。。

  • 相关阅读:
    jar包依赖整理(一)
    centos 下 tomcat 内存不足引起的错误
    KendoUI 基础:Grid 绑定template展示
    C#读取XML文件的五个步骤
    C#winform向Txt文件传值,不重复录入且不清空
    JS页面赋值
    Python3---对象编程思想
    Python3---标准库---numpy
    Python3---标准库json
    Python3---标准库sys
  • 原文地址:https://www.cnblogs.com/wenqiang/p/5404081.html
Copyright © 2011-2022 走看看