您的位置:首页 > 理论基础 > 计算机网络

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

2016-02-29 11:33 190 查看
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移出监听队列
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: