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);

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

  • 相关阅读:
    多线程
    JavaSE
    SpringBoot是什么,可以做什么?
    SSM框架中如何简便上传文件表单
    SQL语句全解,非常棒!
    关于HttpSession 和 Hibernate框架中 session异同点的简单解析
    关于Javascript中页面动态钟表的简单实现
    Java 面向对象 知识点基础浅谈
    Eclipse无法正常启动,弹出对话框内容为 A Java Runtime...
    关于Java中面向对象章节、IO 流中的重点基础知识。
  • 原文地址:https://www.cnblogs.com/wenqiang/p/5404081.html
Copyright © 2011-2022 走看看