(P33)muduo_base库源码分析:TcpServer/TcpConnection

1.TcpServer/TcpConnection

  • 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.txt

  • eg测试:33\jmuduo\tests\Reactor_test08.cc
    33\jmuduo\tests\Reactor_test09.cc
    33\jmuduo\tests\CMakeLists.txt

  • 测试:
    客户端使用telnet测试
    在这里插入图片描述
    在这里插入图片描述
    客户端断开会出现busy-loop状态,即Poller认为是处于高电平的状态。
    在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

喜欢打篮球的普通人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值