muduo网络库(2):对套接字和监听事件的封装Channel

一、概述

Channel类中数据成员:

  • 描述符fd;
  • 需要监听的事件events;
  • fd被**调用的可读/可写/关闭/错误回调函数;

`

 const int  fd_;                    //描述符fd;
 int  events_;                      //需要监听的事件events;
 EventCallback readCallback_;       //fd被**调用的可读回调函数;
 EventCallback writeCallback_;      //fd被**调用的可写回调函数;
 EventCallback closeCallback_;      //fd被**调用的关闭回调函数;
 EventCallback errorCallback_;      //fd被**调用的错误回调函数;

Poller类监听的其实就是一个个Channel对象,Channel可以向Poller注册自己关心的事件,当被**后调用相应的回调函数。类似libevent的struct event。

二、Channel在整个事件驱动循环中的大致流程

  1. Acceptor接收到客户端请求,调用TcpServer回调函数
  2. TcpServer回调函数中创建TcpConnection对象,代表着一个Tcp连接
  3. TcpConnection构造函数中创建Channel对象,保存客户端套接字fd关心的事件(可读);
  4. Channel注册自己到所属事件驱动循环(EventLoop) 中的 Poller上;
  5. Poller开始监听,当发现Channel**后将其添加到EventLoop**队列中;
  6. EventLooppoll返回后处理**队列中的Channel,调用其处理函数
  7. Channel处理函数中根据被**的原因调用不同的回调函数(可读/可写等)。

其中,各个类分别是:

  1. Acceptor监听类,用于监听客户端请求,然后接收客户端;
  2. TcpServer服务器类,用于管理所有的TcpConnection;
  3. TcpConnectionTcp连接类,代表一个Tcp连接,内部保存对应的Channel;
  4. Channel,套接字和相应事件及回调函数的封装,一个事件类;
  5. Poller,io复用的封装,用于监听Channel
  6. EventLoop,事件驱动主循环,调用poll函数,管理**队列,类似libevent的struct event_base
    muduo网络库(2):对套接字和监听事件的封装Channel

未完待续