zoukankan      html  css  js  c++  java
  • R0:前瞻

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

    Libevent使用手册:前瞻

    总览:

    Libevent是一个用来写高性能跨平台非阻塞IO程序的库.它的设计目标如下:

    跨平台

         一个使用Libevent的程序应当能够运行于libevent支持的各种平台.即便有时(某平台可能)没有一种很好的实现非阻塞IO的方式,libevent也应该用一种还凑合(so-so)的方式,这样你的程序才能运行于一个严苛的环境下。

    高速

        libevent使用不同平台下可使用的最快的非阻塞IO实现,同时不引入过多的其他开销.

    扩展性

        libevent被设计为即便是要处理成千上万条活跃链接时也工作良好.

    便捷性

        无论何时,用libevent写程序的最自然的方式都应该是一种稳定的,跨平台的方式.

    Libevent分为以下几个部分

    evutil

         对不同平台的网络实现抽象而出的一套通用函数

    event和event_base

          这是Libevent的核心部分.它针对各种各样的平台相关的,基于事件的非阻塞IO(platform-specific, event-based nonblocking IO backends),抽象出一套API.它能够告知你何时sockets可读或可写,提供了基本的超时函数,并能够侦测操作系统信号.

    bufferevent

        这些函数在Libevent的基于事件的核心代码之上(event-based core)提供了更为便捷的包装.他们使得你的应用程序请求已缓冲的读写,所以只有当真正的IO发生的时候,而不是socket可读写的时候,它们才会通知你.

        bufferevent接口有不同的后端实现,所以他可以充分利用不同平台提供的实现非阻塞IO的快速的方式,例如WINDOWS下的IOCP API.

    evbuffer

        这个模块实现了作为bufferevents基础的buffer,并提供了高效的,易于使用的函数.

    evhttp

        一个简单的HTTP client/server实现

    evdns

        一个简单的DNS client/server实现

    evrpc

        一个简单的RPC实现

    当安装了Libevent,默认地,会安装以下的库:

    libevent_core

        含有所有的核心的event和buffer功能.这个库包含所有的event_base,evbuffer,bufferevent以及公用函数.

    libevent_extra

        这个库包含了你的程序可能会用到的一些与特定协议有关的功能.比如HTTP,DNS,RPC.

    libevent

       这个库的存在是因为一些历史原因.它包括了libevent_core和libevent_extra的功能.你不应该用这个库,它在未来版本的Libevent中会消失.

    以下的库在部分平台上才会被安装:

    libevent_pthreads

        这个库添加了基于跨平台线程库的线程和锁的实现.这个库和libevent_core是分开的,所以当你使用Libevent的时候除非你真的需要以多线程的方式使用Libevent,否则你是不需要链接这个库的.

    libevent_openssl

        这个库使用bufferevents和OpenSSL库,提供了加密通信的功能.这个库和libevent_core是分开的,所以当你使用Libevent的时候除非你真的需要使用加密连接,否则你是不需要链接OpenSSL的.

    头文件

    所有的头文件都放在event2目录下.这些头文件大体可以分为3种:

    API 头文件

       一个API头文件定义了一些LIbevent的公共接口.这些头文件的名字不带后缀.

    兼容性头文件

       兼容性头文件定义了一些已经弃用的函数.除非你想将你的程序从旧版本的Libevent迁移过来,否则你不该使用这些头文件

    结构体头文件

       这些头文件定义了相对不稳定的组件的结构(These headers define structures with relatively volatile layouts).这些结构被暴露给你一是以防你需要快速地访问该结构,还有一些是出于历史原因.如果你的程序直接依赖于这些头文件中的结构,可能会导致你的程序与不同版本的Libevent有二进制兼容性问题,并且很难调试.这些头文件有“_struct.h”的后缀.

         

         

  • 相关阅读:
    Jzoj4729 道路修建
    Jzoj4727 挺进
    Jzoj4727 挺进
    Jzoj4726 种花
    Jzoj4726 种花
    Jzoj4725 素数序列
    Jzoj4725 素数序列
    力扣算法题—040组合求和二
    力扣算法题—039组合求和
    力扣算法题—038报数
  • 原文地址:https://www.cnblogs.com/sdu20112013/p/3973832.html
Copyright © 2011-2022 走看看