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移出监听队列
- muduo库的学习8---TcpServer与TcpClient的基本设计---TcpServer
- muduo库的学习10---TcpServer与TcpClient的基本设计---TcpConnection建立与关闭
- muduo库的学习11---TcpServer与TcpClient的基本设计---TcpConnection接收与发送
- muduo库的学习7---TcpServer与TcpClient的基本设计---总论
- muduo库的学习9---TcpServer与TcpClient的基本设计---TcpConnection成员
- muduo库的TcpServer和TcpConnection用法
- tcpclient tcpserver
- Qt 实现TcpServer与TcpClient
- muduo : TcpServer
- muduo网络库学习(七)用于创建服务器的类TcpServer
- 使用TCPServer与TCPClient收发文件--转贴
- muduo网络库学习笔记(12):TcpServer和TcpConnection类
- muduo中的TcpServer一次完整的工作(上)
- muduo中的TcpServer一次完整的工作(下)
- TcpClient & TcpServer 第一版
- TCPServer 的一般参数
- Qt的tcpserver demo
- TCPServer 的一般参数
- 如何设置UILabel的内边距?
- Java中的DatagramPacket与DatagramSocket的初步
- c++ const类成员函数
- TextView 文字加上闪光与外层圆跟内层圆显示文字
- 用systemd命令来管理linux系统
- muduo库的学习8---TcpServer与TcpClient的基本设计---TcpServer
- 数据库备份脚本使用说明
- 反射实现对象改值
- 1-Python 安装 Matplotlib
- 【2015年年终总结】——工作中的体验
- js面向对象基础
- 2+python解析RSS(feedparser)
- muduo库的学习10---TcpServer与TcpClient的基本设计---TcpConnection建立与关闭
- iOS开发证书变成“此证书的签发者无效”解决方法