Mudo C++网络库第八章学习笔记

时间:2022-01-27 15:13:39

muduo网络库的设计与实现

  • muduo是基于Reactor模式的C++网络库;

Reactor的关键结构

  • Reactor最核心的是事件分发机制, 即将IO multiplexing拿到IO事件分发给各个文件描述符(fd)的事件处理函数;
  • 每个Channel对象自始至终只负责一个文件描述符(fd)的IO事件分发, 但它并不拥有这个fd, 也不会在析构的时候关闭这个fd;

TimerQueue定时器

  • 用timerfd给EventLoop加上定时器功能(和处理IO事件相同的方式来处理定时), 这样的代码一致性更好;

TCP No Delay 和 TCP keepalive

  • TCP No Delay 和 TCP keepalive都是常用的TCP选项, 前者的作用是禁用Nagle算法, 避免连续发包出现延迟, 这对编写低延迟网络服务很重要;
    • TCP keepalive的作用是定期检查TCP连接是否还存在;
    • 如果有应用层心跳的话, TCP keepalive不是必需的;

高水位回调和低水位回调

  • muduo使用HighWaterMarkCallback和WriteComleteCallback;
  • muduo库的event loop pool由EventLoopThreadPool类表示;
  • muduo库的TcpClient具备TcpConnection断开之后重新连接的功能, 加上Connector具有反复尝试连接的功能, 因此客户端和服务器的启动顺序无关紧要;

epoll

  • epoll是Linux独有的高效的IO multiplexing机制, 它与poll的不同是:
    • poll每次返回整个文件描述符数组, 用户要遍历数组以找到那些文件描述符上有IO事件;
    • 而epoll_wait返回的是活动fd的列表, 需要遍历的数组通常会小得多;
    • 在并发连接数较大而活跃连接比例不高时, epoll比poll更高效;