- 博客(118)
- 收藏
- 关注
原创 【从零实现Json-Rpc框架】- 项目实现 - 客户端注册主题整合 及 rpc流程示意
到目前为止,我们已经将整个rpc项目的基本完成了,就只剩下客户端的部分功能了这篇文章将带大家实现一些客户端的最后三个模块客户端注册模块客户端主题模块客户端整合本系列博客的代码都在上述库中的下图(demo代表笔者模仿的案例)本篇博文对【从零实现Json-Rpc框架】- 项目实现 - 客户端注册主题及整合做了一个较为详细的介绍,不知道对你有没有帮助呢觉得博主写得还不错的三连支持下吧!会继续努力的~
2025-04-04 15:12:51
144
原创 【从零实现Json-Rpc框架】- 项目实现 - 服务端主题实现及整体封装
截至现在,在项目实现上,我们已经封装好了零碎接口,对各种消息 及 常用结构体进行了封装也实现了dispatcher路由转发的功能。在服务端方面,完成了业务函数回调总结 - rpc_route.hpp服务的提供、发现、注册 - rpc_registry.hpp在客户端方面,完成了消息请求及其回调 - requestor.hpp消息请求发送 - rpc_caller.hpp服务端未完成部分服务端主题管理模块 - rpc_topic.hpp服务端功能整合 - rpc_server.hpp客户端。
2025-04-03 22:03:44
741
9
原创 【从零实现Json-Rpc框架】- 项目实现 - 服务端registry&discovery实现
前几篇文章中,笔者介绍了rpc的原理和目的,也介绍了需要使用的部分第三方库和我们所需实现的功能现在我们着手项目实现篇章,目前零碎接口项目消息字段类型和抽象层的封装都已经完成了截至上一篇文章,我们已经完成了rpc框架的实现接下来我们将对服务端的进行实现,让其能够更加便捷本篇博文对从零实现Json-Rpc框架】- 项目实现 - 服务端registry&discovery实现做了一个较为详细的介绍,不知道对你有没有帮助呢觉得博主写得还不错的三连支持下吧!会继续努力的~
2025-04-01 22:53:49
1345
7
原创 【从零实现Json-Rpc框架】- 项目实现 - 基于Dispatcher模块的RPC框架
前几篇文章中,笔者介绍了rpc的原理和目的,也介绍了需要使用的部分第三方库和我们所需实现的功能现在我们着手项目实现篇章,目前零碎接口项目消息字段类型和抽象层的封装都已经完成了截至上一篇文章,我们已经进行到Dispatcher路由的封装了根据之前的讨论,dispatcher负责消息的分发和处理。再根据rpc框架的实现模式graph TDA[客户端] -->|1. 发起 RPC 调用| B(RpcCaller)B -->|2. 发送 RpcRequest| C[Requestor]
2025-03-30 19:41:18
982
29
原创 【从零实现Json-Rpc框架】- 项目实现 - Dispatcher模块实现篇
前几篇文章中,笔者介绍了rpc的原理和目的,也介绍了需要使用的部分第三方库和我们所需实现的功能现在我们着手项目实现篇章,目前零碎接口和项目消息字段类型都已经完成了截至上一篇文章,抽象层及其封装都已经完善了所以我们现在需要去使用这些代码,去简单实现单线程的通信传播是否可行并由此引出Dispatcher路由本篇博文对【从零实现Json-Rpc框架】- 项目实现 - Dispatcher路由实现篇做了一个较为详细的介绍,不知道对你有没有帮助呢觉得博主写得还不错的三连支持下吧!会继续努力的~
2025-03-29 14:35:58
940
11
原创 【从零实现Json-Rpc框架】- 项目实现 - muduo网络通信类实现篇
前几篇文章中,笔者介绍了rpc的原理和目的,也介绍了需要使用的部分第三方库和我们所需实现的功能现在我们着手项目实现篇章,目前零碎接口和项目消息字段类型都已经完成了接下来我们将着手抽象层的实现,在完成了通信抽象实现中的消息抽象实现后,我们将实现这里的代码,比如说MType就是用我们之前封装的fields.hpp代码中的消息类型定义,所以如果有需要的话,可以去前面的文章中取,或者笔者的仓库中中也有// 连接回调函数// 连接关闭回调函数// 消息回调函数本篇博文对。
2025-03-29 14:05:18
896
17
原创 【从零实现Json-Rpc框架】- 项目实现 -抽象消息类实现篇
前几篇文章中,笔者介绍了rpc的原理和目的,也介绍了需要使用的部分第三方库和我们所需实现的功能现在我们着手项目实现篇章,目前零碎接口和项目消息字段类型都已经完成了接下来我们将着手抽象层的实现,首当其冲的是通信抽象实现中的消息抽象实现这里的代码,比如说MType就是用我们之前封装的fields.hpp代码中的消息类型定义,所以如果有需要的话,可以去前面的文章中取,或者笔者的仓库中中也有本篇博文对【从零实现Json-Rpc框架】- 项目实现 -抽象消息类实现篇做了一个较为详细的介绍,不知道对你a有没有帮助呢。
2025-03-28 13:48:36
1092
10
原创 【从零实现Json-Rpc框架】- 项目实现 - 项目消息类型字段信息定义篇
截至目前,有关rpc框架的基础准备第三方库,以及零碎接口都已经解释或者封装好了那接下来,笔者将针对rpc框架中消息类型字段进行一个大致的介绍因为我们只是需要知道我们都需要哪些类型的字段,所以这里不会细说每个字段的用途,毕竟他们的存在只是便于我们理解和使用大家还记得下面这张图吗,在项目设计篇中有一笔带过。其实,请求字段就是这张图的绿色部分。至于如何理解绿色字段,就是英文翻译对应的那个模块的body部分的数据,但是这里并没有细分,将相同类型的归为一类就不多说了,直接展示。
2025-03-26 20:19:30
1183
7
原创 【从零实现Json-Rpc框架】- 项目实现 - 零碎功能接口篇
前几篇文章中,笔者介绍了rpc的原理和目的,也介绍了需要使用的部分第三方库和我们所需实现的功能这篇文章,笔者就将整个项目的开头工作做好,也就是将日志宏和序列化、反序列化封装成UUID工具类,为后续的整个项目功能的实现去除不必要的阻碍,话不多说,这就开始本篇博文对【从零实现Json-Rpc框架】- 项目实现 - 零碎功能接口篇做了一个较为详细的介绍,不知道对你有没有帮助呢觉得博主写得还不错的三连支持下吧!会继续努力的~
2025-03-26 19:14:20
821
12
原创 【从零实现Json-Rpc框架】- 项目设计篇
截至当前,笔者已经将所有基础要用的插件等都装好了,也较为详细地介绍了下几个第三方库那么这篇,笔者就来介绍一下我们该如何设计一个Json-Rpc框架本篇博文对【从零实现Json-Rpc框架】- 项目设计篇做了一个较为详细的介绍,不知道对你有没有帮助呢觉得博主写得还不错的三连支持下吧!会继续努力的~
2025-03-25 21:42:23
851
原创 【从零实现Json-Rpc框架】- 第三方库介绍 - fature篇
紧接上回,接下来笔者将介绍rpc框架的最重要的三个第三方库,方便大家理解这回是fature篇std::future是C++11标准库中的一个模板类,它表示一个异步操作的结果。当我们在多线程编程中使用异步任务时,std::future可以帮助我们在需要的时候获取任务的执行结果。std::future的一个重要特性是能够阻塞当前线程,直到异步操作完成,从而确保我们在获取结果时不会遇到未完成的操作。本篇博文对【从零实现Json-Rpc框架】- 第三方库介绍 - fature篇。
2025-03-25 15:07:43
1333
30
原创 【从零实现Json-Rpc框架】- 第三方库介绍 - Muduo篇
紧接上回,接下来笔者将介绍rpc框架的最重要的三个第三方库,方便大家理解这回是Muduo篇这部分并不需要很大掌握,只需要知道大约流程和部分接口需要干什么这部分文字介绍得不方便,大家根据注释理解下就行,重要的参数和方法都已经标注了用优快云博客看可能会不清晰,大家可以复制到各自的编译器中,代码和注释会更加清楚明白,刷题平台也行#include <?public:// 启动事件循环的核心函数,阻塞当前线程并持续监听和处理事件(如 I/O 事件、定时器事件等)。
2025-03-25 13:46:18
1180
20
原创 【从零实现Json-Rpc框架】- 第三方库介绍 - jsoncpp篇
紧接上回,接下来笔者将介绍rpc框架的最重要的三个第三方库,方便大家理解这回是jsoncpp篇四、Jsoncpp库主要是用于实现 Json 格式数据的序列化和反序列化,它实现了将多个数据对象组织成为 json 格式字符串,以及将 Json 格式字符串解析得到多个数据对象的功能。先看一下 Json数据对象类的表示Value&// Value重载了[]和=,因此所有的赋值和获取数据都可以通过// 简单的⽅式完成 val["name"] = "xx";// 移除元素。
2025-03-24 18:53:12
540
4
原创 【从零实现Json-Rpc框架】- 入门准备篇
RPC远程过程调用,是一种通过网络从远程计算机上请求服务,而不需要了解底层网络通信细节。RPC可以使用多种网络协议进行通信,如HTTP、TCP、UDP等,并且在TCP/IP网络四层模型中跨越了传输层和应用层。简言之RPC就是像调用本地方法一样调用远程方法过程可以理解为业务处理、计算任务,更直白的说,就是程序/方法/函数等,就是像调用本地方法一样调用远程方法。举个形象的例子:谈恋爱例子本地过程调用:恋爱对象在你的身边,可以随时约对象吃饭、看电影、约会等等远端过程调用。
2025-03-24 18:51:44
1105
2
原创 【Linux】同步原理剖析及模拟BlockQueue生产消费模型
紧接上一回的从互斥原理到C++ RAII封装实践笔者这回介绍一下线程中几乎与互斥一样重要的同步原理,还有一点,笔者之后的封装都会使用之前博客中封装好的容器,需要的可以去仓库或者前面的博客中自取。所需所用的都放在了这个仓库中生产者,模拟是同数据的那方消费者,取走数据的那方本篇博文对同步原理剖析及模拟多消费者模型做了一个较为详细的介绍,不知道对你有没有帮助呢觉得博主写得还不错的三连支持下吧!会继续努力的~
2025-03-24 11:30:34
1326
31
原创 【Linux网络】手动部署并测试内网穿透
内网穿透(NAT Traversal 或 Port Forwarding)是一种技术手段,用于让外部网络(如互联网)的设备访问位于内网(如家庭或企业局域网)中的服务或设备。它的核心目的是绕过内网环境中的网络限制(如路由器NAT、防火墙等),实现内外网络的互联互通。这里笔者将通过腾讯云LInux-Ubuntu与XMware虚拟机-Ubuntu以及本地window模拟一下内网穿透。本篇博文对手动部署并测试内网穿透做了一个较为详细的介绍,不知道对你有没有帮助呢觉得博主写得还不错的三连支持下吧!
2025-03-18 14:01:03
1237
46
原创 【Linux】从互斥原理到C++ RAII封装实践
紧接上回的线程C++封装,这回笔者着重介绍一下互斥的原理和其必要性,并手把手使用C++封装一个RAII模型。还有一点,笔者之后的封装都会使用之前博客中封装好的容器,需要的可以去仓库或者前面的博客中自取。RAII的核心思想是将资源的获取和初始化放在对象的构造函数中进行,而资源的释放放在对象的析构函数中进行。当对象被创建时,其构造函数会自动执行,从而完成资源的获取;当对象的生命周期结束时,其析构函数会被自动调用,从而完成资源的释放。
2025-03-14 15:46:18
2301
41
原创 【LInux】线程thread从内核原理到C++封装
笔者最近在学习Linux,打算对线程到网络部分的学习做一份较为全面的总结,笔者将把这段时间的博客代码都放在gittee仓库中,有需要可以自取本篇博客所用代码位于本篇博文对线程thread从内核原理到C++封装做了一个较为详细的介绍,不知道对你有没有帮助呢觉得博主写得还不错的三连支持下吧!会继续努力的~
2025-03-14 14:55:08
963
28
原创 【LInux】管道详解
数据传输:一个进程需要将它的数据发送给另一个进程资源共享:多个进程之间共享同样的资源。通知事件:一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种事件(如进程终止时要通知父进程)。进程控制:有些进程希望完全控制另一个进程的执行(如Debug进程),此时控制进程希望能够拦截另一个进程的所有陷入和异常,并能够及时知道它的状态改变。本篇博文对管道做了一个较为详细的介绍,不知道对你有没有帮助呢觉得博主写得还不错的三连支持下吧!会继续努力的~
2025-02-09 16:49:55
1096
8
原创 【Linux】gdb_进程概念
在Linux系统的广袤世界里,高效的程序调试与对进程概念的深刻理解,宛如鸟之双翼、车两轮,是开发者不可或缺的重要技能。GDB(GNUDebugger)作为一款强大的调试工具,犹如开发者手中的精密仪器,能够深入程序内部,精准定位问题所在。而进程概念则是理解Linux操作系统运行机制的核心,它关乎资源分配、任务调度等诸多关键环节。本文将引领大家深入探索GDB调试工具与进程概念,通过丰富的实例和详细的解析,助力大家掌握这两项重要技能。本篇博文对gdb_进程概念。
2025-01-17 15:21:20
2088
45
原创 【MySQL】Linux使用C语言连接安装
mysql的基础,我们之前已经学过,后面我们只关心使用要使用C语言连接mysql,需要使用mysql官网提供的库,大家可以去官网下载我们使用C接口库来进行连接保证mysql服务有效在官网上下载合适自己平台的mysql connect库,以备后用案例先创建一个用户,将用来测试连接的database授权给它// 在终端A中创建用户 connector 并授权// 在终端B中查看 connector 所能使用的数据库,包括了这个用来测试连接的 coonor \g.owners.
2024-12-17 20:22:29
2869
41
原创 【MySQL】用户管理详解
如果我们只能使用root用户,这样存在安全隐患。这时,就需要使用MySQL的用户管理。本篇博文对?做了一个较为详细的介绍,不知道对你有没有帮助呢觉得博主写得还不错的三连支持下吧!会继续努力的~
2024-12-16 22:14:58
1119
48
原创 【MySQL】视图特性详解
视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。视图的数据变化会影响到基表,基表的数据变化也会影响到视图本篇博文对【MySQL】视图特性详解做了一个较为详细的介绍,不知道对你有没有帮助呢觉得博主写得还不错的三连支持下吧!会继续努力的~
2024-12-16 20:50:37
1126
20
原创 【MySql】事务管理(下)
CURD不加控制,会有什么问题?CURD满足什么属性,能解决上述问题?买票的过程得是原子的吧买票互相应该不能影响吧买完票应该要永久有效吧买前,和买后都要是确定的状态吧上文链接:【MySQL】事务管理(上)上文介绍到读题交,这篇文章从可重复读 - 事务的默认级别开始介绍其中隔离级别越严格,安全性越高但数据库的并发性能也就越低,往往需要在两者之间找一个平衡点。
2024-12-16 20:26:02
2064
21
原创 【MySQL】事务管理(上)
CURD不加控制,会有什么问题?CURD满足什么属性,能解决上述问题?买票的过程得是原子的吧买票互相应该不能影响吧买完票应该要永久有效吧买前,和买后都要是确定的状态吧事务就是一组DML语句组成,这些语句在逻辑上存在相关性,这一组DML语句要么全部成功,要么全部失败,是一个整体。MySQL提供一种机制,保证我们达到这样的效果。事务还规定不同的客户端看到的数据是不相同的。事务就是要做的或所做的事情,主要用于处理操作量大,复杂度高的数据。
2024-12-15 19:58:44
995
44
原创 【MySQL】索引特性
在MySQL数据库中,索引起着至关重要的作用。它能够极大地提高数据库的查询速度,但同时也会以插入、更新、删除速度为代价。索引就如同书籍的目录,当我们需要在大量数据中查找特定信息时,有索引可以快速定位到满足查询条件的数据行,而不需要逐行扫描整个表,大大降低了查询的时间复杂度。例如,在一个包含海量数据的表中,如果没有索引,数据库必须进行全部扫描来找到所需的行,这在数据量很大时会非常耗时。为了更直观地展示有无索引的巨大差异,我们来看一个海量表查询案例。
2024-12-15 12:31:08
1353
21
原创 【MySQL】复合查询
📢博客主页:https://blog.youkuaiyun.com/2301_779549673📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!📢本文由 JohnKi 原创,首发于 优快云🙉📢未来很长,值得我们全力奔赴更美好的生活✨文章目录📢前言🏳️🌈1 基本查询回顾🏳️🌈2 多表查询🏳️🌈3 自连接🏳️🌈4 子查询❤️4.1 单行子查询🧡4.2 多行子查询💛4.3 多列子查询💚4.4 在from子句中使用子查询💙4.5 合并查询4.5.1 union4.5.3 union all👥总结
2024-12-11 16:57:04
1180
18
原创 【MySQL】内置函数详解
MySQL内置函数丰富多样,能够极大地提高数据库操作的效率和灵活性。本文将详细介绍MySQL内置函数,帮助读者更好地理解和运用这些强大的工具。MySQL的内置函数可以分为多个类别,包括日期函数、字符串函数、数学函数、加密函数、流程控制函数和其他函数等。这些函数在数据库操作中起着至关重要的作用,可以帮助我们更高效地处理数据。本篇博文对【MySQL】内置函数做了一个较为详细的介绍,不知道对你有没有帮助呢觉得博主写得还不错的三连支持下吧!会继续努力的~
2024-12-11 14:07:11
1168
18
原创 【MySQL】表的基本查询(下)
MySQL 表是数据库中存储数据的基本单位,由行和列组成,每一行代表一条唯一的记录,每一列代表记录中的一个域。在 MySQL 中,数据表主要由以下几个部分组成:数据行、列、索引、主键、外键和约束。也被称为记录,是数据库表中的基本单位。每一行都代表了一条具体的记录,这条记录可能是一个人的详细信息,一个产品的具体参数,或者是一次交易的所有细节。在数据库中,我们通常将一类具有相同属性的数据放在同一列中。
2024-12-10 21:38:30
4001
40
原创 【MySQL】表的基本查询(上)
MySQL 表是数据库中存储数据的基本单位,由行和列组成,每一行代表一条唯一的记录,每一列代表记录中的一个域。在 MySQL 中,数据表主要由以下几个部分组成:数据行、列、索引、主键、外键和约束。数据行:也被称为记录,是数据库表中的基本单位。每一行都代表了一条具体的记录,这条记录可能是一个人的详细信息,一个产品的具体参数,或者是一次交易的所有细节。列:在数据库中,我们通常将一类具有相同属性的数据放在同一列中。
2024-12-10 12:28:59
1236
2
原创 【MySQL】表的约束(下)详解
表中一定要有各种约束,通过约束,让我们未来插入数据库表中的教据是符合预期的。约束本质是通过技术手段,倒通程序员,插入正确的数据。反过来,站在mysql的视角,凡是插入进来的数据,都是符合数据约束的!保证数据的完整性和可预期性真正约束字段的是数据类型,但是数据类型约束很单一,需要有一些额外的约束,更好的保证数据的合法性,从业务逻辑角度保证数据的正确性。比如有一个字段是email,要求是唯一的。在上文链接:中笔者介绍到了主键 primary key,接下来继续介绍剩余的4种约束本篇博文对。
2024-12-09 21:55:37
672
23
原创 【MySQL】表的约束(上)详解
表的约束:表中一定要有各种约束,通过约束,让我们未来插入数据库表中的教据是符合预期的。约束本质是通过技术手段,倒通程序员,插入正确的数据。反过来,站在mysql的视角,凡是插入进来的数据,都是符合数据约束的!约束的最终目标:保证数据的完整性和可预期性真正约束字段的是数据类型,但是数据类型约束很单一,需要有一些额外的约束,更好的保证数据的合法性,从业务逻辑角度保证数据的正确性。比如有一个字段是email,要求是唯一的。表的约束很多,这里主要介绍如下几个:commentzerofillunique key。
2024-12-09 15:37:05
3356
39
原创 【MySQL】数据类型的注意点和应用
本篇博文对?做了一个较为详细的介绍,不知道对你有没有帮助呢觉得博主写得还不错的三连支持下吧!会继续努力的~
2024-12-08 22:04:31
2440
35
原创 【算法】BFS解决最短路径问题
*BFS(广度优先搜索)**在图论算法中有着广泛的应用,尤其是在解决最短路径问题上表现出色。本文将详细介绍如何使用 C++ 实现 BFS 来解决最短路径问题。广度优先搜索是一种用于图遍历的算法,它从起始节点开始,逐步探索其相邻节点,然后再探索相邻节点的相邻节点,以此类推。这种算法在解决最短路径问题时非常有用,因为它能够保证找到的路径是最短的。在 C++ 中,可以使用队列来实现 BFS。队列的特点是先进先出,这与 BFS 的遍历方式相符合。
2024-11-24 23:17:17
4150
55
原创 【算法】动态规划中01背包问题解析
01 背包问题是一个非常经典的动态规划问题,其场景设定为:给定一个背包,它有一定的容量限制,同时有若干种物品,每种物品都有对应的重量和价值,且每种物品只能选择放入背包一次(即选择 0 个或者 1 个),目标是在满足背包容量限制的条件下,求出能够装入背包的物品的最大价值总和。这类问题最基本的解法就是利用二维数组动态规划。利用f[i][j]表示前i个物品中,在背包使用量为j ``时所能容纳的最大价值,最终结果在f[n][v]` 中。具体情况可以分为两种,即不选择i位置的物品,结果为以及选择i。
2024-11-16 11:50:41
5416
83
原创 【Linux】linux编辑器-vim的命令及配置
它们都是多模式编辑器,不同的是vim是vi的升级版本,它不仅兼容v的所有指令,而且vi/vim的区别简单点来说,还有一些新的特性在里面。例如语法加亮,可视化操作不仅可以在终端运行,也可以运行于x window、 mac os、windows。本篇博文对linux编辑器-vim的命令及配置做了一个较为详细的介绍,不知道对你有没有帮助呢觉得博主写得还不错的三连支持下吧!会继续努力的~
2024-11-09 12:29:25
3089
72
原创 【算法】C++深度优先搜索(DFS)全解析
本篇博文对深度优先搜索(DFS)做了一个较为详细的介绍,不知道对你有没有帮助呢觉得博主写得还不错的三连支持下吧!会继续努力的~
2024-11-01 15:11:22
8816
80
原创 【算法】归并排序概念及例题运用
本篇博文对归并排序概念及例题运用做了一个较为详细的介绍,不知道对你有没有帮助呢觉得博主写得还不错的三连支持下吧!会继续努力的~
2024-10-23 13:35:26
3157
78
原创 【算法】C++中的二分查找
二分查找,也被称为折半查找,是一种在有序数组中高效查找目标元素的算法。它的基本思想是将待查找的区间不断地折半,通过比较中间元素与目标元素的大小关系,逐步缩小查找范围,直到找到目标元素或者确定目标元素不存在于数组中。二分查找的优点在于其查找速度较快。在有序数组中,对于长度为 n 的数组,二分查找的时间复杂度为 O (log n)。相比之下,线性查找的时间复杂度为 O (n)。
2024-10-17 17:13:45
5438
75
原创 【C++】map详解
map的结构和set很类似,部分功能就不演示了,上一篇博客中有Map是 C++ 中非常重要的关联容器之一。它以键值对的形式存储数据,其中每个键都是唯一的,这意味着不能有重复的键。如果尝试插入一个已存在的键,将会覆盖该键对应的值。Map的内部结构是红黑树,这使得它具有很多优点。首先,数据是有序的,这有助于高效地进行查找、插入和删除操作。查找、插入、删除的平均和最坏时间复杂度都是O (log n),其中 n 是 map 中元素的个数。例如,当我们需要存储学生的学号和姓名时,可以使用。
2024-10-08 16:35:46
7206
87
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人