【muduo库】server端流程图

2023-05-16

1. 首先是根据陈硕老师的muduo库手册p11的类图,结合自己的学习所得画的一个更详细的流程,使用IO线程池与计算线程池。

在这里插入图片描述

(1)计算线程中,task()调用TcpConnection::send()向IO线程的EventLoop注册完一个sendInLoop()任务之后,并不需要关心接下去数据的发送情况。
   如果一次发送不完,会自动关注POLLOUT事件,多次调用TcpConnection::handleWrite()直到全部发送完毕。发送完毕后会取消关注POLLOUT事件,并回调onWriteComplete()
(2)执行onMessage()之前,TcpConnection::handleRead()已经把收到的数据保存至inputBuffer中。
(3)onMessage()只关心是哪个TcpConnection收到的数据,并不关心这个TcpConnection目前归哪个IO线程管理。

2. 自己对Task处理完成后发送数据步骤的设想,可以和上图结合着看:

// 真正的应该需要用户自己定义在main.cc中:
  
  void workFunc(const TcpConnectionPtr& conn,
  					Buffer* buf,
  					Timestamp time){
       
	   //
	   // 对收到的数据进行业务处理...
	   //
	   
	   // 发送业务处理结果,调用runInLoop()交给TcpConnection所属EventLoop执行
       conn->send(...); 
  }
 
  MessageCallback(ThradPool *tp
					const TcpConnectionPtr& conn,
					Buffer* buf,
					Timestamp time){
	   // 向ThreadPool的任务队列添加任务
       tp->run(boost::bind(workFunc,conn,buf,time)); 
  }
 
  int main(){
       ThreadPool tp;
       TcpServer server(...);
       // 有些代码这里就不写了
	   
	   // 设定messageCallBack,会传递给所有TcpConnection对象
       server.setMessageCallback(boost::bind(MessageCallback,&tp,_1,_2,_3)); 
 
       server.start();
  }
  

3. 以onMessageCallBack()为例的注册与回调过程:

不包含计算线程池的情况下,IO线程不仅要执行IO任务,也需要执行计算任务。

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【muduo库】server端流程图 的相关文章

  • [Linux] Ubuntu配置安装总结

    每次重装新的Ubuntu后 xff0c 都需要配置安装多个应用 xff0c 这里对一些配置进行下总结 以下安装都是在Ubuntu 16 04上进行的 1 Ubuntu安装Google拼音输入法 之前一直使用搜狗拼音 xff0c 但老是崩 x
  • 尚硅谷大数据技术NiFi教程-笔记01【NiFi(基本概念、安装、使用)】

    视频地址 xff1a 尚硅谷大数据NiFi教程 xff08 从部署到开发 xff09 哔哩哔哩 bilibili 尚硅谷大数据技术NiFi教程 笔记01 NiFi xff08 基本概念 安装 使用 xff09 尚硅谷大数据技术NiFi教程
  • 大数据开会记录【NiFi数据集成、AllData数据中台管理系统、RuoYi】

    今天上午和下午开了个小会 xff0c 上午说了一下Nifi xff0c 下午具体说了一下nifi和ruoyi 目录 上午 下午 上午 三个人开会 上次说的挖掘平台 xff0c 您这边是否有技术人员对nifi比较熟悉 xff0c 并且能够将相
  • 大数据周会-本周学习内容总结012

    开会时间 xff1a 2023 05 07 16 00 线下会议 目录 01 es数据同步至mysql 1 1 在es中插入数据后能够同步到mysql中 1 2 修改与删除es中的数据 02 nifi 2 1 Nifi的单机及分布式集群部署
  • 阅读论文文献工具:Zotero

    zotero是开源的文献管理工具 xff0c 可以方便的收集 xff0c 组织 xff0c 引用 xff0c 和共享文献的工具 由安德鲁 w 梅隆基金会 xff0c 斯隆基金会以及美国博物馆和图书馆服务协会资助开发 zotero xff1a
  • Windows11安装docker

    docker官方网站 xff1a Docker Accelerated Containerized Application Development Win11下安装docker win11安装dockerwindow11安装docker小白
  • 光照强度传感器BH1750

    一 芯片介绍 BH1750FVI是一款数字型光强度传感器集成芯片 BH1750的内部由光敏二极管 运算放大器 ADC采集 晶振等组成 结构图 PD二极管通过光生伏特效应将输入光信号转换成电信号 xff0c 经运算放大电路放大后 xff0c
  • VSCode 安装教程(超详细)

    文章目录 VSCode 安装使用教程 xff08 图文版 xff09 那么 xff0c 什么是 IDE 呢 xff1f 目前 xff0c 前端开发主流的 IDE 有以下 5 个下边我们开始玩转 VSCodeVSCode 下载 安装Windo
  • 没有为字符串添加终止符;初始化为‘\0‘

    使用VS2019遇到问题 1 没有为字符串添加终止符 19条消息 消除VS中C6054 可能没有为字符串 34 XXX 34 添加字符串零终止符的警告 wowpH的博客 CSDN博客 可能没有为字符串添加零终止符 2 char a 10 6
  • 安装vue-element-admin报错git clone --mirror -q git://github.com/adobe-webplatform/eve.git C:\Users\Admin

    问题描述 vue element admin项目 执行安装操作时 xff1a 安装依赖 npm install 建议不要直接使用cnpm安装依赖 xff0c 会出现bug xff0c 可以通过如下操作解决npm下载速度慢的问题 由于淘宝 N
  • 添加启动页

    添加启动页 2021 5 7 实验内容 1 为学号后一位同学编写一个简单app 新建一个emptyactivity 在layout的activity main xml中添加如下代码 span class token number 1 spa
  • Python求最大公约数和最小公倍数

    使用辗转相除法求得最大公约数 xff0c 再利用最大公约数求得最小公倍数 辗转相除法求最大公约数 def gcd num1 num2 if num1 num2 61 61 0 return num2 else num1 num2 61 nu
  • matlab实现梯度下降法

    前记 xff1a 大三上学期学了 运筹学 课程 xff0c 里面包含了许多算法和模型 模型就是线性规划及线性规划的对偶理论 xff0c 单纯形法以及它的实际应用 xff1b 整数规划及其解法 xff08 分支定界法 割平面法匈牙利算法 xf
  • 互斥锁、条件变量、信号量浅析

    互斥锁 条件变量 信号量浅析 互斥锁与条件变量 条件变量是为了保证同步 条件变量用在多线程多任务同步的 xff0c 一个线程完成了某一个动作就通过条件变量告诉别的线程 xff0c 别的线程再进行某些动作 xff08 大家都在semtake的
  • Linux中的tty、pts、pty等概念辨析

    Linux中的tty pts pty等概念辨析 基本概念 tty pty pts ptmx tty xff08 终端设备的统称 xff09 xff1a tty一词源于Teletypes xff0c 或teletypewriters xff0
  • 树莓派4B (aarch64) 安装PyTorch 1.8 的可行方案

    树莓派4B aarch64 安装PyTorch 1 8 的可行方案 最终可行方案 试了一堆方案 xff08 源码编译 Fast ai的安装文件等 xff09 之后 xff0c 终于找到一个可行的方案 是在 PyTorch 官方讨论社区的一个
  • Nvidia CUDA初级教程1 CPU体系架构综述

    Nvidia CUDA初级教程1 CPU体系架构综述 视频 xff1a https www bilibili com video BV1kx411m7Fk p 61 2 讲师 xff1a 周斌 本节内容 xff1a 了解现代CPU的架构和性
  • 解决VNC远程连接树莓派,窗口显示不全的问题

    1 vnc连接 xff0c sudo raspi config中7 A5选分辨率就好 或2 通过SSH命令行的方式连接树莓派 xff0c 在命令行输入 xff1a vncserver geometry 1080x1024
  • qt官网下载指导(新手易犯错误)

    一 获取资源 注意这里不要直接百度qt的官网 xff0c 如果直接百度下载会让你注册一个qt的账号 xff0c 并且一般没人下载最新版的qt6 当然也可以下载旧的版本 xff0c 但是由于本人比较愚笨 xff0c 还没有在官网找到qt旧版本
  • AI智能呼叫中心系统,主要应用场景有哪些?

    互联网智能时代 xff0c 销售人员不再每天拨打数百个电话 xff0c 当前呼叫中心电话系统被企业常用在电销行业 金融行业 保险 贷款催收行业等外呼销售行业 由传统的呼叫中心基础上不断的进行升级和改善 xff0c 逐渐演变为人工智能电话外呼

随机推荐

  • ROS:geometry_msgs中 Point32 , Point ,PointStamped 的定义和转换

    ROS geometry msgs中Point32 Point PointStamped 的定义和转换 Point32和Point的定义Point32和Point的转换PointStamped 的定义和转换 本文所用ROS为kinetic版
  • ROS:回调函数不执行

    最近在写一个接收图片消息的节点时 xff0c 遇到了两次回调函数不调用的情况 xff0c 记录一下 循环中有continue被跳过了 具体代码如下 xff1a while ros ok if mat data 61 61 nullptr s
  • Python猜拳游戏

    关键点在于 user input 43 1 3与computer input的值进行比较 xff0c 这样就省掉了对于边界值0和2的单独判断 xff0c 简化了代码 from random import choice def finger
  • ROS:节点发布消息无对应话题名称

    最近在写一个发布里程的节点的时候遇到了 xff0c 发布了消息 xff0c 在ros却没有对应话题情况 通过rostopic list 和 rosnode info 节点名 命令查看 xff0c 均没有对应话题 xff0c 大致代码如下 x
  • 【python安全攻防】python简易端口扫描器

    文章目录 socket套接字optparse模块socket解析主机进行连接获取bannerthreading多线程端口扫描器python nmap端口扫描 对自己看python绝技的一次学习记录 socket套接字 与TCP端口进行交互
  • ROS中geometry_msgs常用消息类型

    官方文档 xff1a geometry msgs Msg Srv Documentation geometry msgs里面所有的消息数据类型 xff1a 节点之间仅支持使用消息通讯 Accel AccelStamped AccelWith
  • 【docker ros】docker 开启自启运行容器中的程序

    前言 xff1a 使用docker大规模部署应用 xff0c 而又需要开机自启 xff0c 自动启动容器中的程序 xff0c 这里以docker ros为例子 xff0c 使用systemctl服务 xff0c 结合shell脚本 xff0
  • 网络协议与网络编程(双电脑串口通讯)

    C C 43 43 网络编程 双电脑串口通讯 在阅读本文前 请确保先查看这篇文章 xff0c 学习有关TCP网编与单电脑信息传输实践 文章目录 C C 43 43 网络编程 双电脑串口通讯 1 让两台电脑连接同一个局域网2 查询IP地址3
  • Linux shell的数组详解

    Linux shell的数组详解 前提变量数组数组声明声明索引数组声明关联数组 数组赋值数组引用数组中常用的变量数组中的其它操作 示例 前提 程序是指 指令 43 数据 的组合 指令 xff1a bash脚本中的代码 xff08 函数 调用
  • cannot find trajectory file at ./examples/trajectory.txt

    slam十四讲 3 7显示运动轨迹的程序 trajectory txt文件路径修改 string trajectory file 61 34 examples trajectory txt 34 改为 string trajectory f
  • slam14讲,李代数库Sophus遇到的问题及解决办法

    首先遇到sophus安装问题是在第4章时 xff0c 高博虽然书上说 我们使用带模板的Sophus库 xff0c 但实际的代码使用的是非模板库 高博在git上给的sophus库文件我在make的时候报错 xff0c 找不到解决办法 xff0
  • PX4添加新的msg和topic

    本人也是初次接触PX4固件没几天 xff0c 学习了msg的一些知识后写下这个以供自己以后参考 一 首先在 PX4 Autopilot msg文件夹下新建一个 msg文件 xff1a 这里我添加的是Data link msg msg 在 m
  • 物理机安装LINUX后的网卡配置问题

    基础材料 xff1a CentOS7 物理服务器 背景说明 xff1a 安装完LINUX操作系统的网卡配置让主机连通网络 xff0c 对于系统管理员来说是再常见不过的事情 xff0c 而且基本上也没什么难度 xff0c 但凡做过系统管理员的
  • PX4添加新的库(lib)

    就在前一两天 xff0c PX4源代码更新了 xff0c 固件库的名称从Firmware变成了PX4 Autopilot 一 首先在lib下新建一个文件夹并添加 cpp hpp和CMakeLists txt 其中 cpp和 hpp是自己写的
  • PX4添加新的应用

    研究了四天怎么添加新的应用程序 xff0c 前几天都尝试着添加 cpp文件的应用程序 xff0c 跟着网上的方法都失败了 xff0c 结果今天试着添加一个 c文件的应用程序居然成功了 先把 c的添加方法写一写 xff0c 以后学会了怎么添加
  • PX4应用程序开机自启动

    修改启动脚本 新版本的PX4固件这些rc文件位置为 xff1a PX4 Autopilot ROMFS px4fmu common init d文件夹中 1 以rc为开头的都是飞控的启动脚本的文件 xff0c 通过这些文件决定那些应用程序应
  • 自由链表(free list)——SGI STL的空间配置器(allocator)第二级配置器维护方法

    参考 xff1a STL源码剖析 以及 STL空间配置器之第二级配置器的free list详解 span class token comment free list的节点 span span class token keyword unio
  • 【C语言 Linux系统开发 视频课程学习笔记】

    学习的课程在b站 xff1a 史上最强最细腻的linux嵌入式C语言学习教程 李慧芹老师 感谢李老师 xff01 感谢up主 xff01 本篇博客只是收集一下学习过程中遇到的函数和其他知识点 xff0c 并不会详细展开 某个函数的具体情况还
  • pthread线程私有数据TSD 几点测试结果

    更加详细的内容查看man手册或百度 xff0c 这里只是几个实际测试的结果 仅代表实验现象 xff0c 并不考虑实现原理 pthread key t key可以定义为全局变量 xff0c 全局变量属于所有线程共有的 在不同的线程中可以用pt
  • 【muduo库】server端流程图

    1 首先是根据陈硕老师的muduo库手册p11的类图 xff0c 结合自己的学习所得画的一个更详细的流程 xff0c 使用IO线程池与计算线程池 xff08 1 xff09 计算线程中 xff0c task 调用TcpConnection