> 文档中心 > 2022年4月3日记:Linux服务器开发,Mark,libevent/libev框架实战的那些坑

2022年4月3日记:Linux服务器开发,Mark,libevent/libev框架实战的那些坑

libevent/libev框架实战的那些坑

  • 前言
  • 总结

在这里插入图片描述

前言

服务器就像一个陀螺,驱动此陀螺得方式只有三种:网络IO事件、定时事件以及信号事件。

常识:如何看一个网络库?
两个线索

  • 网络封装(io检测,io操作)
  • 解决问题(连接的建立,连接的断开,数据发送及到达)
static int lmono(lia_state *L){lua_pushinteger(L.systime_mono());return 1;}static int lwall(lua_state *L){lua_pushinteger(L,systiime_wall());return 1;}

wall+mono2-mono1
有的人喜欢修改系统时间,用这种方式可以保证不会发生错误。
将数据按照优先级放到不同的队列中进行处理。

  • event_add
  • event_del
  • event_assign

讲到这里时,Mark老师有些疑惑感叹到:添加删除红黑树节点该不会已经忘记了吧!?
但是现实正是不出Mark老师所料,这句感叹真是恰到好处。

bind() listen() accept()三个函数都用 evconnlistener进行封装,将accept的错误码处理完塞给回调函数以达到隐藏的目的。

在这里插入图片描述
用户态需要写缓冲区,buf有字节缓存才能写出去。

  • fixbuf
  • ringbuf
    记录读写位置,逻辑的环形,实际还是一个数组。
  • chainbuf
    用不同的回调函数对事件进行解耦。

边沿模式第一次设置,epoll_wait()肯定会返回,还有缓冲区从满到不满的时候。

总结

目前应该具有封装异步事件的网络库,但是目前看来我肯定是还没有。 解决方案就是把代码拿来,手敲一下~