libevent 入门学习

前提条件

  1. libevent实际上是对unix/linux/windows网络编程模型以及IO的封装,必须具有unix高级环境编程和unix网络编程的知识。对我来说,学习libevent实际上是对以上知识的巩固。推荐W. Richard Stevens先生的四卷宝书TCP/IP协议详解,unix高级环境编程,unix网络编程两卷。再次缅怀Stevens先生,并致敬!
  2. libevent使用cmake进行编译,需要有cmake的粗略基础,可以参见https://blog.csdn.net/zhshuai1/article/details/97988975,也可以通过官网或者其他博客进行学习。

环境配置

建议使用CLion作为IDE进行代码阅读。CLion本身就是使用cmake进行编译的,兼容毫无问题。libevent源代码https://github.com/libevent/libevent libevent本身已经给出了很多示例代码,在sample目录下面,已经可以参阅。使用cmake编译之后也可以直接运行。

环境配置FAQ

  1. 如果提示找不到profile,删除手动运行cmake的文件,重新编译。或者重新同步git,但是同步之前要修改.gitignore文件,保证无关代码也被删除。

代码阅读

libevent要隐藏不同系统的差异,所以,对于一些系统调用,在原有的方法基础上进行了封装,在很多地方也支持用户自行定义。后面会有一些例子。event.h前面的说明文档非常值得一读,几乎介绍了整个的libevent的主要功能和使用的大致流程。

概览

event.h中存放了所有和libevent相关的函数原型,可以顾名思义。

<event2/keyvalq_struct.h>,以下这段代码非常巧妙,在不支持模板和泛型的C中硬是使用宏定义写出了泛型,充分利用了宏定义的元编程能力,巧妙!

可配置性

可配置的方法引用的变量都以fn(s)_结尾

1. 内存分配方法 event_set_mem_functions

2. 锁方法 evthread_set_lock_callbacks evthread_set_condition_callbacks

 

初始化

event_base_new_with_config

需要满足两个条件,一个是由传入参数event_config指定的,另外一个是环境变量中的配置。其中很多操作都是直接把配置的值从event_config拷贝到event_base中。另外一个很重要的步骤是选择evsel(eventop类型),这个是选取IO操作的类型,epoll,kqueue,select或者其他,他们之间是有优先级的区分的,策略是寻找第一个满足cfg限制条件的类型。

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值