muduo库的学习8---TcpServer与TcpClient的基本设计---TcpServer

来源:互联网 发布:快拍王软件下载 编辑:程序博客网 时间:2024/04/30 13:04

1.类结构图

class TcpServer {/*************Function Member*********************///basics   TcpServer();   void start();//callbacks   void setConnectionCallback(const ConnectionCallback& cb);   void setMessageCallback(const MessageCallback& cb);   void setWriteCompleteCallback(const WriteCompleteCallback& cb); //operations on TcpConnections   void newConnection(int sockfd, const InetAddress& peerAddr);  void removeConnection(const TcpConnectionPtr& conn); /****************Data Member*************************/typedef std::map<string, TcpConnectionPtr> ConnectionMap;//basics  boost::scoped_ptr<Acceptor> acceptor;  ConnectionMap connections; //callbacks  ConnectionCallback connectionCallback;  MessageCallback messageCallback;  WriteCompleteCallback writeCompleteCallback;  };

2.数据成员

①basics

由此可以看出,TcpServer结构相当地简单。

一个accpetor用于处理连接请求

一个连接集合,connections表示所有的连接。这个集合用Map来表示的。

②callbacks

这是给TcpConnection用的回调函数,在TcpServer类外定义,然后存放在TcpServer中

在新的connection建立时,又由TcpServer传给TcpConnection。


3.函数成员

(1)basics

①构造函数TcpServer()

构造的时候会初始化,acceptor

给acceptor建立listenfd,listenChannel,并将TcpServer::newConnection传递给listenChannel作为回调。

表示在连接请求到来的时候应该做什么。

②start()

在构造完成,设置回调完成之后,用acceptor->listen()。

其内部实现当然是,使得表示acceptor的listenChannel在EventLoop中开始监听。

(2)callbacks

在构造函数初始化完成之后,用户会传递给TcpServer当TcpConnetion建立之后各种事件下将要干什么。

通过调用这里面的函数,实现callback的传递。

(3)oprations on TcpConnections

①newConnection

这个函数在acceptor收到了连接请求时回调。

我们看看它究竟干了些什么

A。new一个TcpConnection然后将其放入connection之中。

这个connection的connChannel的回调函数设置会在其构造函数中完成。

B。进行各种setCallback

前面不是提到了,TcpServer里面存放了各种callback吗,在这里传递给TcpConnetion

C。调用TcpConnection::connectionEstablished

这个会enable TcpConnection的channel进入监听状态

然后调用connectionCallback

②removeConnection

做两件事

A。将conn从connections里面erase

B。调用TcpConnectionDestroyed

它会使channel移出监听队列

0 0