zoukankan      html  css  js  c++  java
  • Libevent:1前言

    一:libevent概述:

            libevent是一个用来编写快速、可移植、非阻塞IO程序的库,它的设计目标是:可移植性、高效、可扩展性、便捷。

     

            libevent包含下列组件:

            evutil:对不同平台下的网络实现的差异进行抽象;

            event、event_base:libevent的核心。为各种平台特定的、基于事件的非阻塞IO后端提供抽象API,让程序可以知道套接字何时已经准备好读或写,并且处理基本的超时功能,检测OS信号。

            bufferevent:为libevent基于事件的核心提供更方便的封装。可以使你的程序请求缓存的读和写,让你知道何时真正的发生IO,而不是在sockets准备好时通知你。(bufferevent接口拥有多个后端,这样可以有效的利用系统提供的更高速的非阻塞IO方式,比如windows的IOCPAPI。)

            evbuffer:在bufferevent层之下实现了缓冲功能,并且提供了方便有效的访问函数。

            evhttp:一个简单的HTTP客户端/服务器实现。

            evdns:一个简单的DNS客户端/服务器实现。

            evrpc:一个简单的RPC实现。

     

    二:库

            当构件libevent时,默认情况下,它会安装下面的库:

            libevent_core:包含所有核心的事件和缓存功能。该库包含了所有的event_base, evbuffer, bufferevent和其他功能函数。        

             libevent_extra:该库定义了特定协议的功能,比如HTTP,DNS和RPC。
             libevent:该库只因历史原因而存在;他包含了libevent_core 和libevent_extra的内容。该库不应该在使用;它将会在未来的libevent删除。

     

            下面的库只会在某些平台上安装:

            libevent_pthreads:该库基于可移植线程库pthreads,增加了线程和锁的实现机制。它独立于libevent_core,因此,除非你要在多线程中使用libevent,否则不需要连接pthreads库。        

            libevent_openssl:这个库为使用bufferevent和OpenSSL进行加密的通信提供支持。它独立于libevent_core,因此,除非你确实需要加密通信,否则不需要连接OpenSSL库。

     

    三:头文件

            目前,所有的libevent头文件都安装在event2目录下。头文件分为三类:

            API头文件:定义libevent的共用接口。这些头文件没有特定后缀。

            兼容头文件:包含那些不推荐使用的函数的定义。除非使用较老版本的libevent,否则不需要包含这种头文件。

            结构头文件:这类头文件以相对不稳定的布局定义各种结构体。这些结构体中的一些是为了提供快速访问而暴露;一些是因为历史原因而暴露。直接依赖这类头文件中的任何结构体都会破坏程序对其他版本libevent的二进制兼容性,有时候是以非常难以调试的方式出现。这类头文件具有后缀“_struct.h”。

            (还存在不在event2目录中的较老版本libevent的头文件,请参考下节:使用老版本libevent)

     

    四:使用老版本Libevent

            Libevent 2.0已经经过修订,使其更加合理和健壮,如果可能的话,应该使用Libevent2.0的API。但是某些时候,你可能不得不使用老版本的API。

            老版本的Libevent的头文件较少,而且没有安装在event2目录下:

    OLD HEADER…

    …REPLACED BY CURRENT HEADERS

    event.h

    event2/event*.h, event2/buffer*.h event2/bufferevent*.h event2/tag*.h

    evdns.h

    event2/dns*.h

    evhttp.h

    event2/http*.h

    evrpc.h

    event2/rpc*.h

    evutil.h

    event2/util*.h

            在2.0以及以后版本的libevent中,老的头文件仍然会作为新头文件的封装而存在。

     

            其他关于使用较老版本的提示:

            1.4版之前只有一个库libevent,它包含现在分散到libevent_core和libevent_extra中的所有功能。

            2.0版之前不支持锁:只有确定不同时在多个线程中使用同一个结构体时,libevent才是线程安全的。

     

    原文:http://www.wangafu.net/~nickm/libevent-book/Ref0_meta.html

    参考:http://blog.csdn.net/laoyi_grace/article/details/6534202

     

     

  • 相关阅读:
    Spark集群下的K-Means算法
    牛客:数据库SQL实战(一)查询入职最晚的员工的所有信息
    吴军《硅谷之谜》
    IntelliJ IDEA 中 右键新建(new)时,选项没有scala(java) class的解决方法和具体解释
    Gitlab跨版本升级
    Kubernetes 0-1 Pod中的livenessProbe和readinessProbe解读
    Kubernetes 0-1 了解Pod
    Kubernetes 0-1 K8S自建LoadBalancer
    Kubernetes 0-1 K8S部署coredns
    Kubernetes 0-1 二进制搭建K8S(四)部署Node
  • 原文地址:https://www.cnblogs.com/gqtcgq/p/7247262.html
Copyright © 2011-2022 走看看