栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【Muduo源码剖析笔记】 网络库之TcpServer

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【Muduo源码剖析笔记】 网络库之TcpServer

【Muduo源码剖析笔记】 网络库之TcpServer TcpServer

提前声明了Acceptor,EventLoop和EventLoopThreadPool。

  EventLoop* loop_;  // the acceptor loop
  const string ipPort_; //
  const string name_;
  std::unique_ptr acceptor_; // avoid revealing Acceptor 指向acceptor的指针。
  std::shared_ptr threadPool_;
  ConnectionCallback connectionCallback_;
  MessageCallback messageCallback_;
  WriteCompleteCallback writeCompleteCallback_;
  ThreadInitCallback threadInitCallback_;
  AtomicInt32 started_;
  // always in loop thread
  int nextConnId_;
  ConnectionMap connections_;

拥有指向acceptor的指针,指向线程池的指针,Connection回调函数,信息回调函数。写完成回调函数,线程初始化回调函数。开始标志位。

初始化函数
TcpServer::TcpServer(EventLoop* loop,
                     const InetAddress& listenAddr,
                     const string& nameArg,
                     Option option)
  : loop_(CHECK_NOTNULL(loop)),  //初始化loop
    ipPort_(listenAddr.toIpPort()), //需要一个地址IP
    name_(nameArg),
    acceptor_(new Acceptor(loop, listenAddr, option == kReusePort)), //new出Acceptor,绑定为本loop。
    threadPool_(new EventLoopThreadPool(loop, name_)), //new出线程池
    connectionCallback_(defaultConnectionCallback),
    messageCallback_(defaultMessageCallback),
    nextConnId_(1)
    
{
  acceptor_->setNewConnectionCallback(
      std::bind(&TcpServer::newConnection, this, _1, _2));
} //把acceptor的获取NewConnection回调函数设置为TCPServer的
TcpServer::newConnection(int sockfd, const InetAddress& peerAddr)

Acceptor发生可读事件的时候就会被调用。

这个由管理Acceptor的子线程调用。

首先从线程池中获取一个ioLoop。

用ioLoop、connName(创建的TCP连接名字)、文件描述符、本地的地址和peerAddr(参数)。然后设置这个TCP connection的各个回调函数。

最后ioLoop绑定TCP的connectEstablished函数。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/958096.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号