本文共 1129 字,大约阅读时间需要 3 分钟。
Acceptor类的主要功能是socket、bind、listen
一般来说,在上层应用程序中,我们不直接使用Acceptor,而是把它作为TcpServer的成员,TcpServer就具有了Acceptor功能
TcpServer还包含了一个TcpConnection列表
因为TcpServer能够处理多个连接TcpConnection与Acceptor类似,有两个重要的数据成员,Socket与Channel,Channel关注Socket可读可写的事件
时序图
(1)当一个连接到来,EventLoop的事件循环loop()返回了一个活跃的通道Channel,该Channel实际上是Acceptor中的一个通道,当该通道返回,会调用Channel中的handleEvent()来处理这个事件,连接到来属于可读事件,又回调了Acceptor中的handleRead()成员函数来处理这个可读事件,在handleRead()中又调用了accept()来处理新的连接,接着又回调了TcpServer的newConnecton(),在该函数中先是创建一个TcpConnection对象,然后通过TcpConnection对象调用connectEstablished()成员函数,在该成员函数中回调用户注册的connCb(); (2)connCb()是在TcpServer中void setConnectionCallback(const ConnectionCallback& cb)注册的; 连接消息的到来的回调函数也是在TcpServer中void setMessageCallback(const MessageCallback& cb)注册的;eg:33\jmuduo\muduo\net\TcpServer.h
33\jmuduo\muduo\net\TcpServer.cc 33\jmuduo\muduo\net\TcpConnection.h 33\jmuduo\muduo\net\TcpConnection.cc 33\jmuduo\muduo\net\Callbacks.h 33\jmuduo\muduo\net\CMakeLists.txteg测试:33\jmuduo\tests\Reactor_test08.cc
33\jmuduo\tests\Reactor_test09.cc 33\jmuduo\tests\CMakeLists.txt测试:
客户端使用telnet测试 客户端断开会出现busy-loop状态,即Poller认为是处于高电平的状态。转载地址:http://hmiws.baihongyu.com/