学习muduo(主要类的介绍)

三个半事件
connectcallback
messagecallback
writecompletecallback (半个)
closecallback

TcpServer

  1. 有up_acceptor,sp_TcpconnectionPtr_Map ,三个用户注册的回调 connection、onMessage、writecompletecallback 、加上两个重要的回调newConnection、removeConnection。

  2. 构造时 创建了一个acceptor和一个thread_pool,将 newConnection回调函数注册到acceptor中(等会再包装一下注册到channel中)

  3. 接口start,调用threadInit 和 acceptor的listen。在loop中执行listen,

Acceptor

  1. 含有listenSocket 和 listenChannel

  2. 构造时 将 handleRead回调函数(包括socket accept + newTcpConnection)
    注册到channel的setReadCallback中。

  3. listen() 调用socket的listen 和
    channel的enableRead,继而调用update,继而调用loop.updateChannel。

Channel

  1. 有Read write close error 回调函数。有设置 允许禁止Read write
    的函数。update函数,调用updateChannel。

  2. channel用来注册和响应io事件
    比如说对于TcpServer,它里边的acceptor对读的channel感兴趣,所以在listen之后让channel enableRead,并runInLoop,这样当有客户端连接时,channel里边有handleRead,即可创建一个TcpConnection。对于TcpConnection中的channel,我们可以设置关注的事件,并当事件发生时执行对应的handle。

TcpClient

  1. 有sp_connector ,TcpconnectionPtr ,三个回调:连接断开、消息到来、发送完毕

  2. 构造时 创建了一个connector,将 newConnection回调函数 注册到connecttor中

  3. 接口connect,调用connector的connect。

Connector

  1. 含有serverAddr 和 up_channel

  2. start()在eventloop中执行 connect函数,又调用connecting创建channel
    将handleWrite(newTcpConnection)、handleError这些回调函数注册到channel中,并enableWrite。

TcpConnection

  1. 由谁创建?TcpServer和TcpClient中的newConnection()创建一个TCP连接、还传了四个事件回调,但是,它是一个回调函数,分别
    被acceptor和connector中的setNewConnectionCallback函数调用,还没完,setNewConnectionCallback也是回调函数,他们分别被包装到handleRead和handleWrite中,最后注册到channel中,分别当channel的fd(即socket)读/写事件发生时被创建。

  2. 含有InetAddress,Buffer, up_socket, up_channel

  3. 构造时 将handleRead等回调函数 注册到channel的setReadCallback中。

EventLopp

  1. reactor模式的核心,每个线程最多只有一个EventLoop,执行一个loop循环,获得一个活动的发生事件的channel列表,对每一个channel执行其对应的handleEvnet。
  2. 同时由于EventLoopThreadPool的存在,可以设置为主从reactor模式,由一个主EventLoop监测listenSocket上的可读事件并创建TcpConnection,把不同的Channel轮转分发给不同的EventLoop,其他的EventLoop用来处理TcpConnection上的Channel事件。

你可能感兴趣的:(muduo网络库)