博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(P33)muduo_base库源码分析:TcpServer/TcpConnection
阅读量:4298 次
发布时间:2019-05-27

本文共 1129 字,大约阅读时间需要 3 分钟。

文章目录

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认为是处于高电平的状态。
    在这里插入图片描述

转载地址:http://hmiws.baihongyu.com/

你可能感兴趣的文章
python3安装scrapy
查看>>
python正则表达式入门一
查看>>
python正则表达式入门二
查看>>
scrapy运行
查看>>
XPATH入门
查看>>
python爬虫 CSS选择器
查看>>
正常关闭java程序
查看>>
查看linux核心数
查看>>
数据结构与算法三: 数组
查看>>
Activiti工作流会签二 启动流程
查看>>
Activiti工作流会签三 撤销,审批,驳回
查看>>
Oauth2方式实现单点登录
查看>>
CountDownLatch源码解析加流程图详解--AQS类注释翻译
查看>>
ES相关度评分
查看>>
我们一起做一个可以商用的springboot脚手架
查看>>
idea在搭建ssm框架时mybatis整合问题 无法找到mapper
查看>>
java设计基本原则----单一职责原则
查看>>
HashMap的实现
查看>>
互斥锁 synchronized分析
查看>>
java等待-通知机制 synchronized和waity()的使用实践
查看>>