testWebserver所有类分析

EventLoop

智能指针

继承std::enable_shared_from_this

为什么要这么继承:
因为EventLoop在别的类中会被shared_ptr管理,并且在loop()函数中被作为参数参与到wpChannel_的构造函数中去

拥有的共享指针对象

SP_Channel wakeupChannel_
SP_Epoll poller_

互斥锁

需要互斥锁来保护共享资源 std::vector<Functor> pendingFunctors_ ,因为loop()函数中将 wakeChannel_ 的 setReadHandler() 与 doPendingFunctors() 绑定,而 doPendingFunctors() 中会操作pendingFunctors_数组,而 queueInLoop() 也会操作pendingFunctors_数组,这两个函数有可能会同时运行,因此需要使用互斥锁来保护pendingFunctors_数组

queueInLoop()

将形参中Functor &&cb放入pendingFunctors_数组中时需要使用互斥锁

void EventLoop::queueInLoop(Functor &&cb) {{std::lock_guard<std::mutex> lock(mutex_);pendingFunctors_.emplace_back(std::move(cb));}...
}

doPendingFunctors()

将pendingFunctors_数组中的数据转移到nextPendingFunctors数组中时需要使用互斥锁

void EventLoop::doPendingFunctors() {...// 把pendingFunctors_中的数据转移到nextPendingFunctors中,// 如果不转移出来,那么在互斥锁加持下,我们直接遍历pendingFunctors_,其他线程这个时候无法访问,无法向里面注册回调函数,增加服务器时延std::vector<Functor> nextPendingFunctors;{std::lock_guard<std::mutex> lock(mutex_);nextPendingFunctors.swap(pendingFunctors_);}for (auto &functor : nextPendingFunctors) {functor();}
}

Epoll

对epoll多路复用进行封装

负责对管理的事件进行增删改,以及更新管理事件中的就绪事件

Channel

一个Channel对象对应一个epoll_event

负责对epoll_event的事件的函数执行

成员变量

成员函数

处理事件的函数

void handleEvent()

void handleClose()

设置对象内管理的数据

void setReadHandler(EventCallBack &&readHandler)

void setWriteHandler(EventCallBack &&writeHandler)

void setCloseHandler(EventCallBack &&closeHandler)

void setFd(int fd)

void setEvents(int events)

void setRevents(int revents)

void setDeleted(bool deleted)

void setSSL(SP_SSL ssl)

void setSSLConnect(bool sslConnect)

获取对象内管理的数据

int getFd()

int getRevents()

bool isDeleted()

SP_SSL getSSL()

eventfd

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/820588.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用代码模拟抓包手动生成一个pcap文件

网上解析pcap文件的方法有人提供了一大堆,但是自己用代码生成一个pcap文件的方法,却几乎没人提过,我刚好要用到这块,就自己研究了一下。 首先关于pcap文件的简单介绍,请参考我另一篇文章, pcap文件的结构和格式说明以及内容解析 了解了结构,下来看代码,看怎么可以写一个…

JIT在汽车行业中的革命性应用:颠覆传统制造模式,引领智能制造新时代

随着科技的飞速发展和市场竞争的日益激烈&#xff0c;汽车行业正面临着前所未有的变革。其中&#xff0c;准时制生产&#xff08;Just-In-Time&#xff0c;简称JIT&#xff09;作为一种先进的生产管理方式&#xff0c;已经在汽车行业中得到了广泛应用&#xff0c;成为推动汽车产…

Springboot整合nacos实现配置中心及服务发现

一、概述 首先&#xff0c;nacos是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。而springboot能够创建一个独立运行spring应用框架&#xff0c;因此&#xff0c;springboot整合nacos&#xff0c;可以更方便实现服务的发现、配置管理等相关功能。 二、spr…

word文件的创建时间和修改时间可以更改吗?答案是肯定的 文件属性修改的方法

一&#xff0c;引言 在日常生活和工作中&#xff0c;我们经常需要处理各种Word文件。有时&#xff0c;由于某些原因&#xff0c;我们可能需要更改Word文件的创建时间和修改时间。虽然这听起来可能有些复杂&#xff0c;但实际上&#xff0c;通过一些简单的方法和工具&#xff0…

社区养老服务系统|基于springboot社区养老服务系统设计与实现(源码+数据库+文档)

社区养老服务系统目录 目录 基于springboot社区养老服务系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、管理员部分功能 &#xff08;1&#xff09; 用户管理 &#xff08;2&#xff09;服务种类管理 &#xff08;3&#xff09;社区服务管理 &#xff08…

【入门】排除异形基因

时间限制 : 1 秒 内存限制 : 128 MB 神舟号飞船在完成宇宙探险任务回到地球后&#xff0c;宇航员张三感觉身体不太舒服&#xff0c;去了医院检查&#xff0c;医生诊断结果&#xff1a;张三体内基因已被改变&#xff0c;原有人体基因序列中已经被渗入外星球不明异形生物基因&a…

Netty实现大文件分块传输详解

文章目录 前言Netty如何处理切分大文件的异步传输 前言 在Netty中&#xff0c;切分大文件进行传输主要利用ChunkedWriteHandler以及它的实现类&#xff0c;如ChunkedFile。这种机制允许你将大文件切分成多个小块&#xff08;chunks&#xff09;&#xff0c;并通过Netty的pipel…

【数据分析面试】21.Spotify 音乐数据库搭建(SQL主键和外键)

题目&#xff1a;音乐数据库设计 假设现在你在Spotify工作&#xff0c;你需要设计一个用于存储歌曲元数据的关系型数据库。 数据库要求包括歌曲标题、歌曲长度、歌曲添加到平台的日期、艺术家、专辑、曲目号&#xff08;在专辑中的顺序&#xff09;、歌曲的发行年份以及流派等…

微前端-qiankun

react作为主应用 npx create-react-app react-main npm i react-router-dom qiankun registerApp.js import { registerMicroApps, start } from qiankun registerMicroApps([{name: reactApp,entry: //localhost:10000,container: #container,activeRule: /react},{name: vu…

微信小程序:限制表单多次提交(变量限制+防抖)

方法一&#xff1a;变量限制 设置一个变量&#xff0c;在提交表单前设置为false&#xff0c;当表单开始提交时设置为true&#xff08;禁用按钮&#xff09;&#xff0c;成功请求或者失败再设置为false 代码 wxml <form bindsubmit"formSubmit"><view cl…

Leetcode 3113. Find the Number of Subarrays Where Boundary Elements Are Maximum

Leetcode 3113. Find the Number of Subarrays Where Boundary Elements Are Maximum 1. 解题思路2. 代码实现 题目链接&#xff1a;3113. Find the Number of Subarrays Where Boundary Elements Are Maximum 1. 解题思路 这一题多少有些惭愧&#xff0c;也是一开始没想到&…

FebHost:为什么注册.BE比利时域名?

.be 是比利时的国家代码顶级域名&#xff08;ccTLD&#xff09;&#xff0c;通常用于与该国有关的网网站。这个域名为那些希望在线上建立与比利时有关联系的个人、公司和组织提供了一个重要的网络标识。 .be 域名于1988年创建&#xff0c;由.BE域名注册机构管理&#xff0c;这…

【k8s】:深入理解 Kubernetes 中的污点(Taints)与容忍度(Tolerations)

【k8s】&#xff1a;深入理解 Kubernetes 中的污点&#xff08;Taints&#xff09;与容忍度&#xff08;Tolerations&#xff09; 1、污点&#xff08;Taints&#xff09;2、容忍度&#xff08;Tolerations&#xff09;3、示例演示-测试污点的具体应用场景3.1 给节点打污点&…

HarmonyOS开发案例:【智能煤气检测】

样例简介 智能煤气检测系统通过实时监测环境中烟雾浓度&#xff0c;当一氧化碳浓度超标时&#xff0c;及时向用户发出警报。在连接网络后&#xff0c;配合数字管家应用&#xff0c;用户可以远程配置智能煤气检测系统的报警阈值&#xff0c;远程接收智能煤气检测系统报警信息。…

【QT教程】QT6信号与槽

QT6信号与槽 使用AI技术辅助生成 QT界面美化视频课程 QT性能优化视频课程 QT原理与源码分析视频课程 QT QML C扩展开发视频课程 免费QT视频课程 您可以看免费1000个QT技术视频 免费QT视频课程 QT统计图和QT数据可视化视频免费看 免费QT视频课程 QT性能优化视频免费看 免费QT视…

思路弱密码比较

weakpass之类的网址下载密码本存入数据库&#xff0c;比如叫做password字段&#xff0c;每次比较SELECT * FROM users WHERE LOCATE(example, password) > 0;

多轴机械臂/正逆解/轨迹规划/机器人运动学/Matlab/DH法 学习记录02——机械臂几何法与DH表示法

系列文章目录 本科毕设正在做多轴机械臂相关的内容&#xff0c;这里是一个学习机械臂运动学课程的相关记录。 如有任何问题&#xff0c;可发邮件至layraliufoxmail.com问询。 1. 数学基础 2. 机械臂几何法与DH表示法 文章目录 系列文章目录一、手臂几何法1.机械手臂2.机械手臂…

vue3+vite+superMap(超图)实现淹没分析

<template><div><el-dialog draggable destroy-on-close v-if="changeInundAtionState" :modal="false" v-model="changeInundAtionState"close-icon="" title="淹没分析" width="20%" :before-cl…

4.配置USART串口实现printf打印

通过TTL转USB实现电脑和单片机连通,是我们调试必不可少的工具 查看原理图,使用USART1,它们的TX和RX分别在PA9和PA10 新建Usart.c存放串口模块的初始化 这段代码是复制了正点原子的工程,添加到前面 #if SYSTEM_SUPPORT_OS #include "includes.h" //ucos 使用 …

Docker安装Kong网关

文章目录 一、kong是什么?二、搭建步骤1.搭建PostgreSQL2.搭建Kong网关2.1、制作镜像2.2、数据库初始化2.3、启动Kong网关一、kong是什么? Github地址:https://github.com/Kong/kong Kong是一个可扩展、开源的云原生API网关,可以在分布式环境中管理、监控和安全地发布API…