rabbitMq------连接管理模块
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 前言
- 管理的字段
- 连接内存管理对象
前言
我们的网络通信框架使用的muduo库,而在mudu库中是已经有了连接的概念,但是我们呢还有一个信道的概念muduo库是没有的。其实muduo库是有一个channel的概念的,只不过这个概念和我们这里的channel不一样。
这也就是我们要封装这个模块的意义。
管理的字段
有一个信道内存管理句柄,因为一个连接上可以有多个信道。
class Connection{private:muduo::net::TcpConnectionPtr _conn;ProtobufCodecPtr _codec;VirtualHost::ptr _host;ConsumerManager::ptr _cmp;ThreadPool::ptr _pool;ChannelManager::ptr _channels;}
提供了三个操作分别是的打开信道,关闭信道和获取指定信道。
就是调用信道内存管理句柄进行操作。
打开信道和关闭都是需要给客户端返回响应的。
void openChannel(const openChannelRequestPtr &req){bool ret = _channels->openChannel(req->cid(),_host,_cmp,_codec,_conn,_pool);if(ret == false){return basicResponse(false,req->rid(),req->cid());}return basicResponse(true,req->rid(),req->cid());
}void closeChannel(const closeChannelRequestPtr &req){_channels->closeChannel(req->cid());return basicResponse(true, req->rid(), req->cid());
}Channel::ptr getChannel(const std::string &cid){return _channels->getChannel(cid);
}
连接内存管理对象
服务器上可能会存在多条链接,因此我们也需要把连接管理起来
通过一个哈希表,建立tcp连接和连接管理对象的映射。
class ConnectionManager{private:std::mutex _mutex;std::unordered_map<muduo::net::TcpConnectionPtr,Connection::ptr> _conns;}
提供三个操作,新建连接。关闭连接和获取指定连接。
在服务器中就需要管理这个句柄,就可以管理所有的channel了。
void newConnection(const VirtualHost::ptr &host,const ConsumerManager::ptr &cmp,const ProtobufCodecPtr &codec,const muduo::net::TcpConnectionPtr &conn,const ThreadPool::ptr &pool){std::unique_lock<std::mutex> lock(_mutex);auto it = _conns.find(conn);if (it != _conns.end()) {return ;}Connection::ptr self_conn = std::make_shared<Connection>(host,cmp, codec, conn, pool);_conns.insert(std::make_pair(conn, self_conn)); }void delConnection(const muduo::net::TcpConnectionPtr &conn){std::unique_lock<std::mutex> lock(_mutex);_conns.erase(conn);}Connection::ptr getConnection(const muduo::net::TcpConnectionPtr &conn){std::unique_lock<std::mutex> lock(_mutex);auto it = _conns.find(conn);if (it == _conns.end()) {return Connection::ptr();}return it->second;}
相关文章:
rabbitMq------连接管理模块
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言管理的字段连接内存管理对象 前言 我们的网络通信框架使用的muduo库,而在mudu库中是已经有了连接的概念,但是我们呢还有一个信道的概念…...
【部署项目】禹神:前端项目部署上线笔记
1.项目打包 ● 我们开发用的脚手架其实就是一个微型服务器,用于:支撑开发环境、运行代理服务器等。 ● 打包完的文件中不存在:.vue、.jsx、.less 等文件,而是:html、css、js等。 ● 打包后的文件,不再借助…...
力扣10.1
983. 最低票价 在一个火车旅行很受欢迎的国度,你提前一年计划了一些火车旅行。在接下来的一年里,你要旅行的日子将以一个名为 days 的数组给出。每一项是一个从 1 到 365 的整数。 火车票有 三种不同的销售方式 : 一张 为期一天 的通行证售…...
TypeScript 算法手册 - 【冒泡排序】
文章目录 TypeScript 算法手册 - 冒泡排序1. 冒泡排序简介1.1 冒泡排序定义1.2 冒泡排序特点 2. 冒泡排序步骤过程拆解2.1 比较相邻元素2.2 交换元素2.3 重复过程 3. 冒泡排序的优化3.1 提前退出3.2 记录最后交换位置案例代码和动态图 4. 冒泡排序的优点5. 冒泡排序的缺点总结 …...
计算机网络——http和web
无状态服务器——不维护客户端 怎么变成有状态连接 所以此时本地建立代理—— 若本地缓存了——但是服务器变了——怎么办?...
使用 Light Chaser 进行大屏数据可视化
引言 在当今数据驱动的世界中,数据可视化变得越来越重要。Light Chaser 是一款基于 React 技术栈的大屏数据可视化设计工具,通过简单的拖拽操作,你可以快速生成漂亮、美观的数据可视化大屏和看板。本文将介绍如何使用 Light Chaser 进行数据…...
Java中的异常概念
在Java编程中,异常(Exception)是一种特殊的情况,它在程序执行期间发生,会干扰程序正常的流程。 ## 一、异常的产生原因 1. **用户输入错误** - 例如,当一个程序期望用户输入一个整数,而用户…...
flutter_鸿蒙next_Dart基础②List
目录 代码示例 代码逐段解析 1. 创建和打印列表 2. 强类型列表 3. 创建可扩展的空列表 4. 创建填充列表 5. 列表扩展 6. 使用可选展开操作符 7. 获取列表长度 8. 列表反转 9. 添加多个元素 10. 移除元素 11. 根据索引移除元素 12. 在特定位置插入元素 13. 清空列…...
【2024保研经验帖】武汉大学测绘遥感国家重点实验室夏令营(计算机向)
前言 先说本人背景:末211,rk前5%,无科研,有几个竞赛(数模、机器人等) 武大的国重是我参加的第二个夏令营,武大国重这次有提前开几个分会场,一个在中南大学,一个在吉林大学,还有在兰…...
PyGWalker:让你的Pandas数据可视化更简单,快速创建数据可视化网站
1、PyGWalker应用: 在数据分析的过程中,数据的探索和可视化是至关重要的环节,如何高效地将分析结果展示给团队、客户,甚至是公众,是很多数据分析师和开发者面临的挑战,接下来介绍的两大工具组合——PyGWalker与Streamlit,可以帮助用户轻松解决这个问题,即使没有复杂的代…...
Ubuntu24.04远程开机
近来在几台机器上鼓捣linux桌面,顺便研究一下远程唤醒主机。 本篇介绍Ubuntu系统的远程唤醒,Windows系统的唤醒可搜索相关资料。 依赖 有远程唤醒功能的路由器(当前一般都带这个功能)有线连接主机(无线连接有兴趣朋友…...
网络编程(12)——完善粘包处理操作(id字段)
十二、day12 之前的粘包处理是基于消息头包含的消息体长度进行对应的切包操作,但并不完整。一般来说,消息头仅包含数据域的长度,但是如果要进行逻辑处理,就需要传递一个id字段表示要处理的消息id,当然可以不在包头传i…...
「3.3」虫洞 Wormholes
多组数据不清零——见祖宗 「3.3」虫洞 Wormholes 问题背景 「一本通3.3 练习2」 题目描述 John 在他的农场中闲逛时发现了许多虫洞。虫洞可以看作一条十分奇特的有向边,并可以使你返回到过去的一个时刻(相对你进入虫洞之前)。John 的每…...
网页篡改防御方法
网页篡改防御方法 将服务器安全补丁升级到最新版 操作系统、应用程序、数据库等都需要使用最新的安全补丁,打补丁主要是为防止攻击者利用缓冲溢出和设计缺陷等进行攻击。 封闭未使用但已经开放的网络服务端口及未使用的服务 对于Windows Server 2003操作系统&am…...
Pikachu-Cross-Site Scripting-xss盲打
xss盲打,不是一种漏洞类型,而是一个攻击场景;在前端、或者在当前页面是看不到攻击结果;而是在后端、在别的页面才看到结果。 登陆后台,查看结果;...
JAVA思维提升案例5
抢红包案例: 要求: 一个大V直播时发起了抢红包活动,分别有:9、666、188、520、99999五个红包。 请模拟粉丝来抽奖,按照先来先得,随机抽取,抽完即止,注意:一个红包只能被…...
PostgreSQL的字符集
PostgreSQL的字符集 PostgreSQL 支持多种字符集(character sets),也称为编码(encoding)。字符集决定了数据库存储和处理文本数据的方式。在创建数据库时,可以指定数据库的字符集,或者使用默认的…...
CUDA 参考文章
CUDA:NVCC编译过程和兼容性详解_nvcc把cuda代码转换成什么-CSDN博客https://blog.csdn.net/fb_help/article/details/80462853 1、CUDA:NVCC编译过程和兼容性详解 CUDA:NVCC编译过程和兼容性详解 https://codeyarns.com/2014/03/03/how-to-sp…...
强缓存和协商缓存的区别
强缓存和协商缓存是Web开发中用于优化页面加载性能的两种主要缓存机制,它们之间存在显著的区别。以下是对这两种缓存机制的详细比较: 一、定义与工作原理 强缓存 定义:强缓存是指在浏览器发送请求前,先检查本地缓存中是否存在可用…...
工控系统组成与安全需求分析
目录 工控系统安全威胁与需求分析工业控制系统安全需求分析 工控系统安全威胁与需求分析 工业控制系统是由各种控制组件监测组件数据处理与展示组件共同构成的,对工业生产过程进行控制和监控的业务流程管控系统。 就是现在有很多工厂,它比如说要生产鞋…...
AXOrderBook:打造A股市场高效订单簿处理系统的完整指南
AXOrderBook:打造A股市场高效订单簿处理系统的完整指南 【免费下载链接】AXOrderBook A股订单簿工具,使用逐笔行情进行订单簿重建、千档快照发布、各档委托队列展示等,包括python模型和FPGA HLS实现。 项目地址: https://gitcode.com/gh_mi…...
VSCode插件离线安装的隐藏技巧:如何批量安装.vsix文件提升效率
VSCode插件离线批量安装实战指南:企业级效率提升方案 在团队协作或企业内网环境中,开发者常面临VSCode插件安装的困境——无法访问官方市场、重复下载耗时、版本管理混乱。传统单个.vsix文件安装方式在需要部署数十个插件时,效率低下到令人抓…...
ROS Noetic/Melodic下,手把手教你将Qt Designer做的UI打包成Rviz插件
ROS Noetic/Melodic下Qt Designer UI转Rviz插件的完整实践指南 在机器人操作系统(ROS)生态中,Rviz作为可视化利器,其插件机制允许开发者扩展自定义功能。当遇到需要将Qt Designer设计的精美界面嵌入Rviz时,许多开发者会…...
AI 将编写 90% 的代码……我们现在到底该怎么办?
我至今仍清晰地记得读到那个标题的瞬间。那是 2026 年初一个平凡的夜晚,大约晚上 9 点,我正习惯性地在关闭笔记本电脑前翻阅科技新闻。突然,一行文字让我如坠冰窖,整个人僵在原地。“Anthropic 首席执行官预判:未来六个…...
PCB拼板工艺全解析:从设计到生产的核心要点
1. PCB拼板的核心价值与必要性PCB拼板是电子工程中一项看似简单却极为关键的工艺环节。作为一名从业十年的硬件工程师,我处理过上千款PCB设计,深刻体会到合理拼板对生产效率和成本控制的影响。简单来说,拼板就是将多块相同或不同的PCB按照特定…...
终极指南:3个维度解锁Cyber Engine Tweaks,重塑赛博朋克2077游戏体验
终极指南:3个维度解锁Cyber Engine Tweaks,重塑赛博朋克2077游戏体验 【免费下载链接】CyberEngineTweaks Cyberpunk 2077 tweaks, hacks and scripting framework 项目地址: https://gitcode.com/gh_mirrors/cy/CyberEngineTweaks Cyber Engine …...
3步解锁:让老旧电脑流畅运行Windows 11的终极精简方案
3步解锁:让老旧电脑流畅运行Windows 11的终极精简方案 【免费下载链接】tiny11builder Scripts to build a trimmed-down Windows 11 image. 项目地址: https://gitcode.com/GitHub_Trending/ti/tiny11builder 在数字时代,系统性能直接影响工作效…...
告别‘找飞机’难题:手把手教你用DUT Anti-UAV数据集做小目标跟踪(PyTorch/YOLO实战)
无人机小目标跟踪实战:基于DUT Anti-UAV数据集的YOLO-PyTorch解决方案 当无人机在复杂背景下以每秒15米的速度掠过建筑群时,传统目标跟踪算法的检测框开始像醉汉一样摇摆不定——这是去年我在某智慧城市项目中遇到的真实困境。小目标、快速移动和复杂背景…...
点云处理实战:如何用RMLS算法保留锐利边缘(附Python代码示例)
点云处理实战:RMLS算法在锐利边缘保留中的工程实践 当你在处理3D扫描数据时,是否经常遇到这样的困扰——经过滤波处理后,原本清晰的物体边缘变得模糊不清?这正是传统移动最小二乘(MLS)算法的痛点所在。作为计算机视觉工程师&#…...
在Windows 11上用Bochs调试Linux 0.00:从BIOS加载到保护模式切换的完整实战
在Windows 11上用Bochs调试Linux 0.00:从BIOS加载到保护模式切换的完整实战 如果你对操作系统的底层实现充满好奇,想亲手探索计算机从加电到运行第一个用户程序的完整过程,那么这次实验将是一次绝佳的实践机会。我们将使用Bochs模拟器&#x…...
