Muduo之Acceptor源码分析笔记

Muduo之Acceptor源码解析

前面我们大概介绍了Muduo网络库的整体架构以及Reactor模式的一般架构,从这里就开始分析Muduo网络库中用到的一些类。

本篇文章主要是介绍Acceptor

muduo网络库的example中作为server的类都是继承于class TcpServer, 而TcpServer初始化的时候创建一个Acceptor对象、一个EventThreadPool对象以及一些Callback。因此从整体上来看Acceptor主要就是供TcpServer使用,生命期由后者控制,负责管理服务器监听的socket并将回调通知使用者,进行连接分发。下面我就专门分析下Acceptor的实现。

首先先看下类图:

首先从class Acceptor类的声明中可以看出该类包含主要包含如下几个数据成员:

class Acceptor : boost::noncopyable
{
 public:
  typedef boost::function<void (int sockfd,
                                const InetAddress&)> NewConnectionCallback;

  Acceptor(EventLoop* loop, const InetAddress& listenAddr, bool reuseport);
  ~Acceptor();

  void setNewConnectionCallback(const NewConnectionCallback& cb)
  { newConnectionCallback_ = cb; }

  bool listenning() const { return listenning_; }
  void listen();

 private:
  void handleRead();

  EventLoop* loop_;
  Socket acceptSocket_;
  Channel acceptChannel_;
  NewConnectionCallback newConnectionCallback_;
  bool listenning_;
  int idleFd_;
};

从上面可以看到主要包含一个EventLoop、Socket和一个Channel对象。
Acceptor主要负责服务器端的端口监听、事件连接以及事件分发。

acceptSocket_就是服务器监听端口的对象,class Socket把传统意义上的socket进行封装,而class Channel又是对socket的封装,他将socket以及对应的多个处理函数Callback封装在一起,那么当socket发生事件的时候,能够很快的找到相应的处理函数。
handleRead()是读事件处理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值