精华内容
下载资源
问答
  • Libevent2

    2020-11-24 19:10:20
    <div><p>It woks nicely with https://github.com/rbalint/libevent/tree/forked-daapd-changes-on-2.0.21</p><p>该提问来源于开源项目:ejurgensen/forked-daapd</p></div>
  • libevent2

    2020-05-29 00:43:50
    struct.h include/event2/buffer_compat.h include/event2/dns.h include/event2/dns_compat.h include/event2/dns_struct.h include/event2/event.h include/event2/event_compat.h include/event2/event_struct.h ...

    
    #
    # Create the libraries.
    #
    include(AddEventLibrary)
    add_event_library(event_core SOURCES ${SRC_CORE})
    add_event_library(event_extra
        LIBRARIES event_core_shared
        SOURCES ${SRC_EXTRA})
    
    if (NOT EVENT__DISABLE_OPENSSL)
        add_event_library(event_openssl
            LIBRARIES event_core_shared ${OPENSSL_LIBRARIES}
            SOURCES ${SRC_OPENSSL})
    endif()
    
    if (CMAKE_USE_PTHREADS_INIT)
        set(SRC_PTHREADS evthread_pthread.c)
        add_event_library(event_pthreads
            LIBRARIES event_core_shared
            SOURCES ${SRC_PTHREADS})
    endif()
    
    # library exists for historical reasons; it contains the contents of
    # both libevent_core and libevent_extra. You shouldn’t use it; it may
    # go away in a future version of Libevent.
    add_event_library(event SOURCES ${SRC_CORE} ${SRC_EXTRA})
    
    

    event_extra

    -- SRC_EXTRA:             event_tagging.c;http.c;evdns.c;evrpc.c
    
    

    event_core

    -- SRC_CORE:   
              buffer.c
    ;bufferevent.c;
    bufferevent_filter.c
    ;bufferevent_pair.c;
    bufferevent_ratelim.c;
    bufferevent_sock.c;
    event.c;
    evmap.c;
    evthread.c;
    evutil.c;
    evutil_rand.c;
    evutil_time.c;
    listener.c;
    log.c
    ;signal.c;
    strlcpy.c
    ;select.c
    ;poll.c;
    epoll.c
    
    

    头文件

    # Group the source files.
    set(HDR_PRIVATE
            bufferevent-internal.h
            changelist-internal.h
            defer-internal.h
            epolltable-internal.h
            evbuffer-internal.h
            event-internal.h
            evmap-internal.h
            evrpc-internal.h
            evsignal-internal.h
            evthread-internal.h
            ht-internal.h
            http-internal.h
            iocp-internal.h
            ipv6-internal.h
            log-internal.h
            minheap-internal.h
            mm-internal.h
            ratelim-internal.h
            strlcpy-internal.h
            util-internal.h
            evconfig-private.h
            compat/sys/queue.h)
    
    set(HDR_COMPAT
            include/evdns.h
            include/evrpc.h
            include/event.h
            include/evhttp.h
            include/evutil.h)
    
    set(HDR_PUBLIC
            include/event2/buffer.h
            include/event2/bufferevent.h
            include/event2/bufferevent_compat.h
            include/event2/bufferevent_struct.h
            include/event2/buffer_compat.h
            include/event2/dns.h
            include/event2/dns_compat.h
            include/event2/dns_struct.h
            include/event2/event.h
            include/event2/event_compat.h
            include/event2/event_struct.h
            include/event2/http.h
            include/event2/http_compat.h
            include/event2/http_struct.h
            include/event2/keyvalq_struct.h
            include/event2/listener.h
            include/event2/rpc.h
            include/event2/rpc_compat.h
            include/event2/rpc_struct.h
            include/event2/tag.h
            include/event2/tag_compat.h
            include/event2/thread.h
            include/event2/util.h
            include/event2/visibility.h
            ${PROJECT_BINARY_DIR}/include/event2/event-config.h)
    
    展开全文
  • libevent2 incompability

    2020-11-24 19:10:18
    <p>has managed to submit some patches to libevent, which brings hope that it will some day be possible to drop the libevent1 dependency and use forked-daapd with vanilla libevent2.</p><p>该提问来源于...
  • libevent2 support

    2020-12-05 04:09:01
    <div><p>There is an issue when using libevent2. Could we backport this PR? https://github.com/darkk/redsocks/pull/123</p><p>该提问来源于开源项目:semigodking/redsocks</p></div>
  • <div><p>We should probably only require libevent2.</p><p>该提问来源于开源项目:zmap/zmap</p></div>
  • libevent2 的最小堆 最小堆 一颗完全二叉树 每个根节点都比自己的叶子小 左、右(如果有) 叶子之间没有大小关系 具体对外api 有 插入、删除(根据啥来删除呢?位置索引?)、获取最优(就是根节点)、 主要操作:...

    堆,又称为优先队列。虽然名为优先队列,但堆并不是队列。堆和队列是两种不同的数据结构,堆是树态的,队列是线性的。在队列中,我们可以向队列添加元素,取出的时候是按照进入队列的先后顺序取出元素的,先进先出;而在堆中,却不是按照元素添加的先后顺序,而是按照元素的优先级取出元素。

    所以二叉堆是为了找出最大或最小而生的,“大”和“小”并不是传统意义上的小大,而是优先级的高低。二叉堆分为最大堆和最小堆,最大堆的顶点可以看作是优先级最高的也可以看作是优先级最低的,最小堆也是如此。

    最小堆

    • 一颗完全二叉树
    • 每个根节点都比自己的叶子小
      • 最大(或者最小)是对其子树的所有的节点来说的
    • 左、右(如果有) 叶子之间没有大小关系
    • 具体对外api 有 插入、删除(根据啥来删除呢?位置索引?:直接删除根节点)、获取最优(就是根节点)、
    • 主要操作:上浮、下沉、获取左叶子、获取右叶子、比较大小
    • 大神分析
      (1)它是一颗完全二叉树
      (2)任意一个节点均小于或等于其左右子节点的关键码(大根堆相反就是了)
      因此可以得知,当前树形结构的根节点就是当前整个树形结构最小的节点。。。

    二叉堆的性质:

    • 1.父节点的键值总是优先于任何一个子节点的键值;
    • 2.左右子树都是以一个二叉堆。

    完全二叉树

    • 满二叉树
    • 完全二叉树除最后一层外,其它层的节点个数都是满的,最后一层节点都靠左排列在这里插入图片描述

    关键

    • 插入是在最后插入,然后上浮
    • 删除是与最后一个对调,然后下沉
    • 每次操作后,这棵树还是一颗最小堆
    • 根节点从0开始还是从1开始,计算索引的公式不同

    0 号不用,从1开始做根节点,计算父、左子、右子

    • labuladuo也是推荐这样的方法,这样方便,不要为难自己。但是看起来libevent2是从0开始的
    • 为了计算方法,第一个位置(0号位置),空着不用。
    • 数组中下标为 i 的节点的【左子节点】,就是下标为i∗2的结点,【右子节点】的下标为i∗2+1,其【父结点】为i/2。
    • 在这里插入图片描述

    上浮、下沉

    • 这俩操作最难,为什么呢,因为要遍历、要交换、要比较。
    • labuladong说过:

    因为⼆叉树是最容易培养框架思维的,⽽且⼤部分算法技巧,本质上都是树的遍历问
    题。

    • 二叉树题目的框架:
    • 最小堆的实现也应该符合这个框架:
      在这里插入图片描述

    插入、删除 算法

    • 参考
    • 首先来看节点的插入:
      (1)将要插入的节点按照完全二叉树的形式插入到当前树形结构的最末尾
      (2)对这个刚刚插入的节点进行向上浮动,浮动的原理是:比较当前的节点和其父节点,如果比父节点小,那么与父节点交换,然后递回的进行,直到浮动不动了或者到了根节点
    • 接下来来看节点的删除:
      (1)小根堆的删除是删除当前的根节点,也就是返回当前根节点的值,然后用当前树形结构的最后一个节点来代替根节点
      (2)从***当前属性结构的最后一个非叶节点开始***,向下浮动,浮动的原理是:
      如果有比自己小的子节点,那么与这个子节点交换,然后递回的对刚刚交换下去的子节点进行向下浮动,(如果当前两个子节点都比自己小,那么就与最小的那个交换)
    展开全文
  • libevent2使用手册

    2021-03-27 14:36:39
    个人整理的livevent高性能IO框架的使用手册,可以作为libevent学习的入门资料。
  • aerospike-async-client Aerospike Libevent2异步客户端
  • <div><p>add config to disable libevent2 randomize case,just like discuss in this issue https://github.com/libevent/libevent/pull/97 ,some nameservers do not follow the expected response ...
  • add patch to fix bug of needing to add depends on libopenssl in all libevent library, according to communicate with who is a member of libevent2, this bug will be fixed in version 2.1.9. here is issue...
  • libevent 是一款很好用的...本文用 ping pong 測试来对照 muduo 和 libevent2 的吞吐量,測试结果表明 muduo 吞吐量平均比 libevent2 高 18% 以上,个别情况达到 70%。 測试对象 libevent 2.0.6-rc (http://monk...

    libevent 是一款很好用的 C 语言网络库,它也採用 Reactor 模型,正好能够与 muduo 做一对照。

    本文用 ping pong 測试来对照 muduo 和 libevent2 的吞吐量,測试结果表明 muduo 吞吐量平均比 libevent2 高 18% 以上,个别情况达到 70%。

    測试对象

    測试环境与測试方法

    測试环境与前文《muduo 与 boost asio 吞吐量对照》同样。

    我自己编写了 libevent2 的 ping pong 測试代码,地址在 http://github.com/chenshuo/recipes/tree/master/pingpong/libevent/ 。因为这个測试代码没有使用多线程,所以本次測试仅仅对照单线程下的性能。

    測试内容为:client与server执行在同一台机器,均为单线程,測试并发连接数为 1/10/100/1000/10000 时的吞吐量。

    在同一台机器測试吞吐量的原因:

    • 如今的 CPU 非常快,即便是单线程单 TCP 连接也能把 Gigabit 以太网的带宽跑满。假设用两台机器,全部的吞吐量測试结果都将是 100 MiB/s,失去了对照的意义。(也许能够对照哪个库占的 CPU 少。)
    • 在同一台机器上測试,能够在 CPU 资源同样的情况下,单纯对照网络库的效率。也就是说单线程下,服务端和client各占满 1 个 CPU,比較哪个库的吞吐量高。

    測试结果

    单线程吞吐量測试,数字越大越好:

    muduo_libevent_16k

    以上结果让人大跌眼镜,muduo 竟然比 libevent 快 70%!跟踪 libevent2 的源码发现,它每次最多从 socket 读取 4096 字节的数据 (证据在 buffer.c 的 evbuffer_read() 函数),怪不得吞吐量比 muduo 小非常多。由于在这一測试中,muduo 每次读取 16384 字节,系统调用的性价比較高。

    buffer.c:#define EVBUFFER_MAX_READ      4096

    为了公平起见,我再測了一次,这回两个库都发送 4096 字节的消息。

    muduo_libevent_4k

    測试结果表明 muduo 吞吐量平均比 libevent2 高 18% 以上。

    讨论

    因为 libevent2 每次最多从网络读取 4096 字节,大大限制了它的吞吐量。

    转载于:https://www.cnblogs.com/lcchuguo/p/4503738.html

    展开全文
  • <div><p>Update libevent2 to 2.1.8 <p>Many thanks to Jo-Philipp Wich and Jonas Gorski for helping me out. <p>Signed-off-by: Daniel Engberg </p><p>该提问来源于开源项目:lede-project/source</p></...
  • ve started to test shadow by writing simple echo client using libevent2. libevent2 evconnlistener uses SO_KEEPALIVE, so i can't use it with shadow.</p><p>该提问来源于开源项目:shadow/shadow...
  • 使用libevent2 实现 http_server 使用http实现libevent linux http server 完整代码如下: //LIBS += -levent qt工程pro 链接设置 #include <errno.h> #include <string.h> #include <fcntl.h>...

    使用libevent2 实现 http_server

    使用http实现libevent

    linux http server 完整代码如下:

    //LIBS += -levent  qt工程pro 链接设置
    #include <errno.h>
    #include <string.h>
    #include <fcntl.h>
    #include <sys/socket.h>
    #include <sys/types.h>
    #include <netinet/in.h>
    #include <event.h>
    #include <evhttp.h>
    
    void httpserver_handler(struct evhttp_request *req, void *arg)
    {
        const char *cmd_type;
        struct evbuffer *buf = evbuffer_new();
        if (buf == NULL)
        {
            printf("evbuffer_new error !\n");
            return;
        }
    
        switch (evhttp_request_get_command(req))
        {
            case EVHTTP_REQ_GET:    cmd_type = "GET";    break;
            case EVHTTP_REQ_POST:   cmd_type = "POST";   break;
            case EVHTTP_REQ_HEAD:   cmd_type = "HEAD";   break;
            case EVHTTP_REQ_PUT:    cmd_type = "PUT";    break;
            case EVHTTP_REQ_DELETE: cmd_type = "DELETE"; break;
            case EVHTTP_REQ_OPTIONS:cmd_type = "OPTIONS";break;
            case EVHTTP_REQ_TRACE:  cmd_type = "TRACE";  break;
            case EVHTTP_REQ_CONNECT:cmd_type = "CONNECT";break;
            case EVHTTP_REQ_PATCH:  cmd_type = "PATCH";  break;
            default: cmd_type = "unknown"; break;
        }
    
        printf("%s url=%s \n", cmd_type, evhttp_request_get_uri(req));
    
        evbuffer_add_printf(buf,"<html>\n"
                "<head>\n"
                "  <title>libevent http server </title>\n"
                "</head>\n"
                "<body>\n"
                "  <h1>libevent http server start success</h1>\n"
                "</body>\n"
                "</html>\n");
        evhttp_send_reply(req, 200, "OK", buf);
    }
    
    int create_listener(int port, int backlog)
    {
        int ret;
        int fd;
        fd = socket(AF_INET, SOCK_STREAM, 0);
        if (fd < 0)
        {
            printf("socket error !\n");
            return -1;
        }
    
        int opt = 1;
        ret = setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, (char *)&opt, sizeof(int));
    
        struct sockaddr_in addr;
        memset(&addr, 0, sizeof(addr));
        addr.sin_family = AF_INET;
        addr.sin_addr.s_addr = INADDR_ANY;
        addr.sin_port = htons(port);
    
        ret = bind(fd, (struct sockaddr*)&addr, sizeof(addr));
        if (ret < 0)
        {
            printf("bind error !\n");
            return -1;
        }
        ret = listen(fd, backlog);
        if (ret < 0)
        {
            printf("listen error !\n");
            return -1;
        }
    
        int flags;
        if ((flags = fcntl(fd, F_GETFL, 0)) < 0
            || fcntl(fd, F_SETFL, flags | O_NONBLOCK) < 0)
        {
            printf("fcntl error !\n");
            return -1;
        }
        return fd;
    }
    
    int start_httpserver(int port)
    {
        int ret;
        int fd = create_listener(port, 128);
        if (fd < 0)
        {
            return -1;
            printf("create_listener error !\n");
        }
        struct event_base *base = event_init();
        if (base == NULL)
        {
            printf("event_init error !\n");
            return -1;
        }
        struct evhttp *httpd = evhttp_new(base);
        if (httpd == NULL)
        {
            printf("enhttp_new error !\n");
            return -1;
        }
        ret = evhttp_accept_socket(httpd, fd);
        if (ret != 0)
        {
            printf("evhttp_accept_socket error \n");
            return -1;
        }
        evhttp_set_gencb(httpd, httpserver_handler, NULL);
        printf("http server success started\n");
        event_base_dispatch(base);
        return 0;
    }
    
    int main(void)
    {
        start_httpserver(8080);
        return 0;
    }
    

    基础环境:ubuntu:18.04

    编译前安装依赖 :(我们使用libevent 库作为使用的http与网络开源库)

     sudo apt-get install -y  libevent-dev 

    编译命令:

    g++ main.cpp  -levent -o http_server

    http_server 即是编译成功的http server了

    运行: 

    ./http_server

    编译与运行示例图:

     

    测试:

    1、浏览器测试:  浏览器打开:http://127.0.0.1:8080  回车

    效果: 

    2、通过curl命令命令行测试:  curl http://127.0.0.1:8080    回车

    curl 是一个http 客户端命令行软件,非常好用

    没有的话需要安装:  sudo apt-get install -y  curl 

     

     

     

    部分代码说明: 

    如何实现一个http server 
    一个高性能网络开源库libevent

    memcached 内存数据库的底层网络库是 libevent 

    O_NONBLOCK 把监听的socket 设置成了非阻塞的socket 

    为甚libevent 是事件驱动的呢
    我们写代码的是往里面去注册事件 跟事件的处理回调函数
    事件+回调函数  (libevent运行机制!!!!事件驱动)
    event_init 初始化libevent

    struct evhttp *httpd = evhttp_new(base);
    新建一个 libevent 的事件

    evhttp_accept_socket(httpd, fd)
    把事件跟我们的监听socket 绑定

    httpserver_handler 监听socket 的 回调函数 
    evhttp_set_gencb(httpd, httpserver_handler, NULL);

    event_base_dispatch 是libevent的内部循环函数!!!

    通过注册的回调函数 来执行我的代码 

    evhttp_request_get_uri 读取客户端的url

    evhttp_send_reply 函数是把请求发回给客户端

    这个代码一共三个函数

    create_listener  就是创建监听socket 
    start_httpserver  初始化libevent  ,以及注册了监听socket 的事件处理事件
    httpserver_handler 监听socket 的 回调函数 

     

     

     

    展开全文
  • m not sure if this is the best way to accomplish it, but here is one way to have transmission use the folded-in libevent2. Without these or similar changes it seems kind of pointless to included in ...
  • muduo 与 libevent2 吞吐量对比 libevent 是一款非常好用的 C 语言网络库,它也采用 Reactor 模型,正好可以与 muduo 做一对比。 本文用 ping pong 测试来对比 muduo 和 libevent2 的吞吐量,测试结果表明 muduo ...
  • 使用libevent2的简单httpdns服务器守护程序 HttpDns 0.1 Command line arguments with either long or short options: -h, --help show this help. -v, --verbose print log messages -d, --deamon put program...
  • libevent 2.x' not found; install it or point LIBEVENT_BASE to base path. Stop. <p>libevent is at '/usr/lib/libevent.a', and I have no idea how to set LIBEVENT_BASE appropriately. I tried ...
  • install -d -m0755 /home/robot/OpenWrt/LS1046A-19.07/build_dir/target-aarch64_generic_glibc/libevent-2.1.11-stable/ipkg-aarch64_generic/libevent2-pthreads/usr/lib cp -fpR /home/robot/OpenWrt/LS1
  • coturn和libevent2 工程一起 cmake 化, cmakelist.txt方cortun目录下,libevent2在src/libevent2-2.1-stable下 add subdirecotry后,libevent2 会自动生成, libevent2 会自动在coturn的编译目录下生成 event2-...
  • libevent2 example crashed

    2021-01-07 12:48:14
    0x555555560448) at /home/xinxi/ws/libwebsockets/lib/event-libs/libevent/libevent.c:136 #10 0x00007ffff7d128f8 in ?? () from /lib/x86_64-linux-gnu/libevent-2.1.so.6 #11 0x00007ffff7d1333f in event_base...
  • 使用libevent2 实现 http_server 精简版 使用http实现libevent linux http server 完整代码如下: #include <errno.h> #include <string.h> #include <fcntl.h> #include <sys/socket.h>...
  • 前面我们比较了 muduo 和 libevent2 的吞吐量,得到的结论是 muduo 比 libevent2 快 18%。有人会说,libevent2 并不是为高吞吐的应用场景而设计的,这样的比较不公平,胜之不武。为了公平起见,这回我们用 libevent2...
  • libevent2 简单服务器客户端实现

    千次阅读 2015-04-23 16:52:30
    libevent2 简单服务器客户端实现 基本功能,应该比较容易扩展 windows版本,我用的vc编译,linux去掉wsa相关内容,将sprintf_s替换成snprintf应该就可以了。server.cpp/* socket server */#include <iostream>#...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,850
精华内容 1,540
关键字:

libevent2