──────────────────────────────────────────────────────────────
┌————————————┐
│▉▉♥♥♥♥♥♥♥♥ 99
前言
libevent、libev和libuv都是c语言实现的异步事件库。注册异步事件,检测异步事件,根据事件的触发先后顺序调用相对应的函数处理事件。
处理的时间包括:**网络IO事件,定时事件以及信号事件。**这三个是驱动服务器逻辑的三个重要事件。
libevent和libev解决了跨平台的问题,封装了异步事件库与操作系统的交互。
libevent使用了大量的全局变量,很难安全得在多线程环境中运行;event的数据结构太大,包含了io、时间以及信号 处理全封装在一个结构体中,额外的组件如http、dns、openssl等实现质量差,计时器采用最小二叉堆(libuv改为最小四叉堆)不能很好的处理时间事件。
如何阅读网络库
记住两个线索:
网络封装
- IO检测
- IO操作
事件操作
- 连接建立的问题 (限制最大连接数,设置黑白名单,创建用户的对象)
- 连接断开
- 数据到达 (具体消息的分发,解密)
- 数据发送
不注重效率的都会使用g