1. 说明
- 一个TcpServer类,这个需要配合TcPConnection类理解
- 使用了Acceptor,EventLoop,EventLoopThreadPool,原子类
- noncopyable
2. 变量
-
类型定义
- ThreadInitCallback
- ConnectionMap
-
枚举类型
- kNoReusePort
- kReusePort
-
EventLoop* loop_; // the acceptor loop
- 一个线程一个EventLoop
-
const string ipPort_;
- 服务端口
-
const string name_;
- 服务名
-
std::unique_ptr acceptor_; // avoid revealing Acceptor
- 提供监听套接字创建绑定功能
-
std::shared_ptr threadPool_;
- 线程池指针
-
ConnectionCallback connectionCallback_;
- 连接到来的回调函数
-
MessageCallback messageCallback_;
- 消息到来的回调函数,以上两个都在Callback.h中定义
-
WriteCompleteCallback writeCompleteCallback_;
- 写完成回调函数
-
ThreadInitCallback threadInitCallback_;
- 线程初始回调函数
-
AtomicInt32 started_;
- 判断是否开始,一开始为0,在start()函数中判断
-
int nextConnId_;
- 下一个连接ID
-
ConnectionMap connections_
- 连接列表,实际是TcpConnection指针列表
3. 函数
1. 私有
-
void newConnection(int sockfd, const InetAddress& peerAddr);
- 该函数作为acceptor_的新连接建立回调函数
- 新建一个TcpConnectionPtr连接对象,设置一些回调函数,最后运行TcpConnection::connectEstablished函数,这个函数就是把通道加入到Poller进行关注
-
void removeConnection(const TcpConnectionPtr& conn);
- 连接的关闭回调函数,调用removeConnectionInLoop
-
void removeConnectionInLoop(const TcpConnectionPtr& conn);
- 从连接列表中移除这个连接,获得该连接的loop事件.把TcpConnection的connectDestroyed()函数加入到loop事件中
2. 公有
-
构造
- 需要传参EventLoop*,InetAddress&,服务名称字符串和枚举option
- 各变量的初始化,新建Acceptor和EventLoopThreadPool,设置Acceptor的连接回调函数为newConnection.
-
析构
- 释放资源,把每一个连接的析构函数加入到每个连接的loop事件中
-
const string& ipPort() const
- 返回服务端口
-
const string& name() const
- 返回服务名
-
EventLoop* getLoop() const
- 返回loop_,EventLoop
-
void setThreadNum(int numThreads)
- 调用threadPool_->setThreadNum()设置线程池的数量
-
void setThreadInitCallback(const ThreadInitCallback& cb)
- 设置线程初始化回调函数
-
std::shared_ptr threadPool()
- 返回线程池指针
-
void start()
- 该函数可以多次调用,可以跨线程调用
- 线程池start(),开启acceptor_的listen()函数,get_pointer()是muduo的获得智能指针的裸指针的函数
-
void setConnectionCallback(const ConnectionCallback& cb)
- 设置连接到来时的回调函数
-
void setMessageCallback(const MessageCallback& cb)
- 设置消息到来时的回调函数
-
void setWriteCompleteCallback(const WriteCompleteCallback& cb)
- 设置写完成的回调函数