Channel类,即通道类。
>它是muduo库负责注册读写事件的类,并保存了fd读写事件发生时调用的回调函数,如果poll/epoll有读写事件发生则将这些事件添加到对应的通道中。
>一个通道对应唯一EventLoop,一个EventLoop可以有多个通道。
>Channel类不负责fd的生存期,fd的生存期是有socket决定的,断开连接关闭描述符。
>当有fd返回读写事件时,调用提前注册的回调函数处理读写事件
下面是源码解析:
#ifndef MUDUO_NET_CHANNEL_H
#define MUDUO_NET_CHANNEL_H
#include <boost/function.hpp>
#include <boost/noncopyable.hpp>
#include <boost/shared_ptr.hpp>
#include <boost/weak_ptr.hpp>
#include <muduo/base/Timestamp.h>
namespace muduo
{
namespace net
{
class EventLoop;
///
/// A selectable I/O channel.
///
/// This class doesn't own the file descriptor.
/// The file descriptor could be a socket,
/// an eventfd, a timerfd, or a signalfd
class Channel : boost::noncopyable
{
public:
typedef boost::function<void()> EventCallback; //事件回调处理
typedef boost::function<void(Timestamp)> ReadEventCallback; //读事件的回调处理,传一个时间戳
Channel(EventLoop* loop, int fd); //一个Channel一个EventLoop
~Channel();
void handleEvent(Timestamp receiveTime); //处理事件
void setReadCallback(const ReadEventCallback& cb) //设置各种回调函数
{ readCallback_ = cb; }
void setWriteCallback(const EventCallback& cb)
{ writeCallback_ = cb; }
void setCloseCallback(const EventCallback& cb)
{ closeCallback_ = cb; }
void setErrorCallback(const EventCallback& cb)