muduo源码分析——TcpServer和Acceptor

这篇文章用于分析muduo的TcpServer类和Acceptor类,原本打算将TcpConnection也放到这里一起聊的,但是那个太多啦,一篇文章太长会让人读的很不舒服把。

当然我用的代码是其他大神开发的flamingo的源码,这是一个基于muduo开发的即时聊天服务器
具体的地址https://blog.csdn.net/analogous_love/article/details/69481542

不废话了,进入正题吧

TcpServer 成员及构造

我有一个习惯,查看一个新class的时候,首先看private中有哪些成员,可能这样更好捋清class之间的关系把。

	typedef std::map<string, TcpConnectionPtr> ConnectionMap;
    private:
		EventLoop*                                      loop_;  // the acceptor loop
		const string                                    hostport_;
		const string                                    name_;
		std::shared_ptr<Acceptor>                       acceptor_; // avoid revealing Acceptor
        std::shared_ptr<EventLoopThreadPool>            eventLoopThreadPool_;
		ConnectionCallback                              connectionCallback_;
		MessageCallback                                 messageCallback_;
		WriteCompleteCallback                           writeCompleteCallback_;
		ThreadInitCallback                              threadInitCallback_;
		std::atomic<int>                                started_;
		int                                             nextConnId_;  // always in loop thread
		ConnectionMap                                   connections_;//每个生成的链接的指针都会保存在这里
	};

一个TcpServer有一个EventLoop,先简单的理解为用来接收新的连接。
(英文备注基本上是陈硕大佬自己写的备注)。

关于类之间的关系,可以看到持有一个Acceptor和一个EventLoopThreadPool的指针。
再看看TcpServer初始化的代码。

TcpServer::TcpServer(EventLoop* loop,
    const InetAddress& listenAddr,
    const std::string& nameArg,
    Option option)
    : loop_(loop),
    hostport_(listenAddr.toIpPort()),
    name_(nameArg),
    acceptor_(new Acceptor(loop, listenAddr, option == kReusePort)),
    //threadPool_(new EventLoopThreadPool(loop, name_)),
    connectionCallback_(defaultConnectionCallback),
    messageCallback_(defaultMessageCallback),
    started_(0),
    nextConnId_(1)
{
   
    acceptor_->setNewConnectionCallback(std::bind(&TcpServer::newConnection, this, std::placeholders::_1, std::placeholders::_2));
}

TcpServer实例被创建的时候,会new一个Acceptor,并由自己对应得指针指向这个Acceptor,我们也可以从最后看出,Acceptor设置了回调函数,绑定为了TcpServer的newConnection函数,也就是说,当这一个Acceptor的newConnectionCallback_函数被调用的时候ÿ

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值