- 博客(65)
- 收藏
- 关注
原创 C++基于protobuf实现仿RabbitMQ消息队列---服务器模块认识2
消息的存储并没有使用数据库,因为消息长度通常不定,且有些消息可能会非常庞大,因此并不适合存储在数据库中,
2025-12-24 16:01:55
882
原创 C++基于protobuf实现仿RabbitMQ消息队列---服务器模块认识1
在数据管理模块中管理交换机,队列,队列绑定,消息等部分数据数据。下面的管理都是在 不同的模块中实现的,把数据存储在sqlite数据库中;这些是在模块完成的最后实现,利用sqlite数据库;与模块实现的逻辑关系不强;这几个核心概念数据都需要在内存和硬盘中存储的。以上模块的文件中,******Mapper类的实现,就是各模块的持久化的实现mq/mqsever · 耀空/项目mq - 码云 - 开源中国https://gitee.com/yaokong123/project-mq/tree/master/mq/m
2025-12-22 18:40:28
818
原创 基于WebSocket的多用户网页五子棋---错误记录
在写到进入游戏房间的时候,一直报 用户重复的错误;还谈websocket 链接异常的错误;大厅打开的session里面的uid一直是同一个,我怀疑conn->get_request_header("Cookie")这只是一部分错误,还有好的已经找不到图片了,也就没记录在这里;在这里能查看json特有类型,需要进行强转;这个项目是基于 cookie信息创造用户的;进行Websocket断开链接错误,但能正常运行,图片加载不出来。换一个内存占用小的图片就行了。登入时,总是无法匹配,
2025-12-21 15:14:11
278
原创 C++基于protobuf实现仿RabbitMQ消息队列---项目设计
使用技术简介:开发主语言:C++序列化框架:Protobuf 二进制序列化网络通信:自定义应用层协议 + muduo 库(对 tcp 长连接的封装、并且使用 epoll 的事件驱动模式,实现高并发服务器与客户端)源数据信息数据库: SQLite3单元测试框架: Gtest首先看看核心需求是什么;
2025-12-21 15:13:41
1104
原创 C++基于protobuf实现仿RabbitMQ消息队列---技术认识2
查看当前数据库在编译阶段是否启动了线程安全 int sqlite3_threadsafe();0-未启用;1-启用非线程安全模式线程安全模式(不同的连接在不同的线程/进程间是安全的,即一个 句柄不能用于多线程间)串行化模式(可以在不同的线程/进程间使用同一个句柄)若在编译阶段启动了线程安全,则在程序运行阶段可以通过参数选择线程安全等级。
2025-12-15 14:14:24
1152
原创 C++基于protobuf实现仿RabbitMQ消息队列---技术认识1
开发主语言:C++序列化框架:Protobuf 二进制序列化网络通信:自定义应用层协议 + muduo 库(对 tcp 长连接的封装、并且使用 epoll 的事件驱动模式,实现高并发服务器与客户端)源数据信息数据库: SQLite3单元测试框架: Gtest。
2025-12-05 13:13:11
1196
原创 C++基于websocket的多用户网页五子棋 ---- 整合封装服务器模块设计实现
在前面已经讲过了,项目整体的设计,和各个需要模块的介绍;所以各种所需的接口api都完成,现在需要把他们整合起来,搭建一个服务器模块,这个模块是对外提供服务器接口的;需要这个服务器模块,进行完成服务器的搭建;服务器模块,是对当前所实现的所有模块的一个整合,并进行服务器搭建的一个模块,最终封装实现出一个gobang_server的服务器模块类,向外提供搭建五子棋对战服务器的接口。通过实例化的对象可以简便的完成服务器的搭建。
2025-11-29 12:34:14
909
原创 C++基于websocket的多用户网页五子棋 ---- 模块介绍2
在WEB开发中,HTTP协议是⼀种无状态短链接的协议这就导致一个客户端连接到服务器上之后,服务器不知道当前的连接对应的是哪个用户,也不知道客⼾端是否登录成功,这时候为客户端提所有服务是不合理的。因此,服务器为每个用户浏览器创建一个会话对象(session对象);一个浏览器独占一个 session对象(默认情况下)。
2025-11-17 08:30:00
746
1
原创 C++基于websocket的多用户网页五子棋 ---- 模块介绍1
如上篇服务器流程图中对应已经长连接的用户来说,有时我们需要获得它们的 socket链接的关系;这对于 之后管理用户,创建对战房间等等来说,都要用到;在线用户管理,是对于当前游戏大厅和游戏房间中的用户进行管理能够让在房间,大厅获取用户的socket连接信息;或者说让程序中根据用户信息,找到能够与用户客户端进行通信的Socket连接,进而实现与客户端的通信。判断一个用户是否在线,或者判断用户是否已经掉线。
2025-11-12 12:02:40
1091
1
原创 C++基于websocket的多用户网页五子棋 --- 项目设计
前面已经了解过此项目主要依赖的库,现在就需要对其进行结构设计,功能模块划分,让其能够实现我们需要的功能;我们要实现的是一个在线五子棋对战服务器,提供用户通过 浏览器进行用户注册,登录,以及实时匹配,对战,聊天等功能;所以若宏观的分,可以分为三大块,数据管理模块,前端界面模块与业务处理模块;当然,如果要实现上述功能,那么就需要对业务处理模块再次进行细分为多个模块来实现各个功能;接下来就让我们看看如何划分吧;
2025-11-10 15:13:27
506
2
原创 C++基于websocket的多用户网页五子棋 --- 认识依赖库
* websocketpp::log::alevel::none 禁止打印所有日志*//*设置日志打印等级*//*清除指定等级的日志*//*设置指定事件的回调函数*//*websocket握手成功回调处理函数*//*websocket连接关闭回调处理函数*//*websocket消息回调处理函数*//*http请求回调处理函数*//*发送数据接口*//*关闭连接接口*//*获取connection_hdl 对应连接的connection_ptr*/
2025-11-09 17:38:18
1523
1
原创 Linux基础OI-系统文件OI
pathname: 要打开或创建的⽬标⽂件flags: 打开⽂件时,可以传⼊多个参数选项,⽤下⾯的⼀个或者多个常量进⾏“或”运算,构成flags。O_RDONLY: 只读打开O_WRONLY: 只写打开,O_RDWR : 读,写打开这三个常量,必须指定一个且只能指定一个O_CREAT : 若文件不存在,则创建它。需要使用mode选项,来指明新问件的访问权限,打开文件时,如果文件已经存在,写入的内容会覆盖原内容。O_APPEND: 追加写。
2025-03-16 14:55:29
1036
原创 Linux 进程管理 -- 进程的替换 (补进程创建)
进程管理中,包括 进程 创建,终止,等待和替换;创建因该是首个要了解的内容的;但是之前忘记写了,这里在介绍完 替换补充了一下;当然如过不知道 创建的概念的话,还是先建议提前看创建的内容部分的;
2025-03-10 10:02:43
977
原创 Linux进程控制 -- 进程退出 与 等待
在之前我们已经大致了解了,什么是进程和进程的一些概念;现在我们了具体了解进程,也就是进程的控制,进程的创建,终止与等待;现在先了解什么是进程的终止:进程终止的本质是释放系统资源,就是释放进程申请的相关内核数据结构和对应的数据和代码。
2025-03-05 15:45:32
1151
原创 Linux进程概念 -- 地址空间
在了解地址空间的时候,我们先回顾一下之前在学习c语言的时候,所了解的空间分布图;可能我们对他并不理解!那么可以先对其进行各区域分布验证:通过这个图我们可以验证而且这牵扯到了 虚拟地址,说白点,我们通常说的程序地址空间 就是 虚拟地址;
2025-02-26 08:31:42
1150
原创 Linux进程概念 -- 环境变量
在此之前已经了解过了,进程的切换,进程优先级等进程的相关内容;那么在程序运行时,相关参数就怎么样进入到进程中的呢?还有我们在编写C/C++代码的时候,在链接的时候,从来不知道我们的所链接的动态静态库在哪里,但是照样可以链接成功,为什么?这就涉及到了本篇的主要内容,环境变量,环境变量表和命令行参数表;
2025-02-25 10:39:58
1367
原创 linux进程概念-进程的切换与调度队列
理解好上面的过程,就能更好的理解 调度算法 抢占 等等。抢占:最简单的理解,也不能说特别对的理解:当加入一个新进程时 是进入 a 队列 还是 e 队列呢?可以理解为 直接 加入到 a 队列;这也相对插队了,只要优先级提前就能提前调度。同时解答了前面,为什么优先级的改变只能还不NI值,而不能改变 PRI值。
2025-01-22 11:40:42
874
原创 Linux进程概念-两个特性进程状态-僵尸进程-孤儿进程
一个子进程退出,不是一退出把 PCB 全部释放掉而是把其代码和数据释放掉;因为不会再调度这些代码;PCB 中还有要传给父进程的相关信息。在子进程退出后,父进程得到子进程 PCB 相关信息前,这个状态,就是僵尸状态;如果父进程一直不管,不回收,不获取子进程的提出信息,那么 Z 会一直存在!
2025-01-18 14:05:02
956
原创 Linux进程概念-进程状态
在上一篇已经了解了在进程中的基本概念,现在我来了解一下进程的相关状态;对于进程的状态,在详细了解之前我们可以来一个粗略的理解:进程的状态可以理解为就是一个整数,用宏定义 实现R, S等状态;也就是进程状态就是take_struck内的一个整数;如果不理解也没关系,下面来看看对进程状态的看法:先理解最基本的三个状态运行&&阻塞&&挂起。
2025-01-17 12:28:22
1146
原创 Linux进程概念--冯诺依曼体系与操作系统的初识
在前面,已经了解过Linux中的基础的开发工具,如vim的使用与配置,Mafile的了解,对软件环境的理解,对缓冲区的理解,编辑器gcc,用于调试的gdb等等;通过这些的学习对Linux的了解也是有了一点的基础,现在要更深一步的理解,那就要学习非常重要的知识,进程!
2024-12-17 10:03:16
982
原创 c++11 --- 左值与右值的使用;
深拷贝定义类型如vector,string,map等等实现移动构造的意义很大,因为移动构造的效率比拷贝构造快的多;直接交换对应内存的内容,比开辟一个再拷贝过去,效率高的多。
2024-11-07 17:57:13
1276
原创 封装红黑树实现mymap和myset
前面我们已经了解过红黑树如何实现,和map与set的基本用法;要继续深入了解map,set中的库函数的用法,与细节那么我们就可以试着简单用语言封装模拟实现一下map与set;这里就分享一下我的思路;若没了解过我之前的文章中就有。
2024-10-31 16:57:49
1162
原创 用哈希表封装myunordered_map和myunordered_set
如果对模拟实现map与set 不了解或者忘了的,可以在复习一下(我之前的博客就有)因为这两种方法基本一样,这里的细节可能说的不全;
2024-10-30 15:33:49
2271
原创 哈希——哈希表处理哈希冲突的方法
当然哈希表无论选择什么哈希函数也避免不了冲突(主要作用就是减少冲突),那么插入数据时,如何解决冲突呢?主要有两种两种方法,和。
2024-10-25 10:22:47
2526
1
原创 权限(补充)
在上一篇中已经见识了一部分权限,但是少了很重要的一部分:那就是用户之间的转换,文件读写的关系,这里就简单的介绍一些;我们在那么于是, 问题就来了!换句话来讲, 就是只要用户具有目录的写权限, 用户就可以删除目录中的文件, 而不论这个用户是否有这个文件的写权限那如何解决呢?
2024-10-20 23:07:34
497
原创 红黑树的实现
说明:下图中假设我们把新增结点标识为c (cur),c的⽗亲标识为p(parent),p的⽗亲标识为g(grandfather),p的兄弟标识为u(uncle)。c为红,p为红,g为⿊,u存在且为红,则将p和u变⿊,g变红。,c之前是黑色的,是在c的子树中插⼊,符合情况1,变⾊将c从黑色变成红色,更新上来的。,c之前是黑色的,是在c的子树中插入,符合情况1,变色将c从黑色变成红色,更新上来的。c为红,p为红,g为黑,u不存在或者u存在且为黑,c为红,p为红,g为黑,u不存在或者u存在且为黑,
2024-10-15 07:56:55
1126
原创 AVL树实现
AVL树得名于它的发明者G. M. Adelson-Velsky和E. M. Landis是两个前苏联的科学家,他们在1962年的论⽂《An algorithm for the organization of information》中发表了它。AVL树是最先发明的是平衡⼆叉查找树,AVL是⼀颗空树,或者具备下列性质的⼆叉搜索树:它的左右⼦树都是AV树,且左右⼦树的⾼度差的绝对值不超过1。AVL树是⼀颗⾼度平衡搜索⼆叉树,通过控制⾼度差去控制平衡。AVL树实现这⾥我们引入一个平衡因⼦。
2024-10-13 19:37:19
1015
原创 map系列的使用
map的声明如下,Key就是map底层关键字的类型,T是map底层T的类型。但要注意:map的 key 与 T 是封装在存储键值对应数据。这就类似于封装的map中又将封装key 与 T 到pair中;set默认要求Key支持小于比较,如果不支持或者需要的话可以自行实现仿函数传给第⼆个模版参数。map底层存储数据的内存是从空间配置器申请的。⼀般情况下,我们都不需要传后两个模版参数。
2024-10-11 09:15:35
879
原创 set的基本用法 和 底层简单了解
set的声明如下,T就是set底层关键字的类型(可以把T 当作key)set默认要求T支持小于比较,如果不支持或者想按自己的需求走可以自行实现仿函数传给第二个模版参数set底层存储数据的内存是从空间配置器申请的,如果需要可以⾃⼰实现内存池,传给第三个参数。⼀般情况下,我们都不需要传后两个模版参数。set底层是⽤红⿊树实现,增删查效率是 ,迭代器遍历是⾛的搜索树的中序,所以是有序的。O(logN)
2024-10-10 16:26:07
1348
原创 二叉搜索树
前面有学习过二叉树一系列的数据结构,还有一系列关于查找的工具,例如等等(若不太熟悉可以自行查找一下哦);这些虽都是查找的工具但也有不一样。
2024-10-08 11:00:28
1484
原创 Linux的基础指令(下)
这里不为打包和压缩做仔细的区分;文件合并;为了减小文件体积,内存;(文件在下载,传输时 都要经过总之:压缩包的目的就是便于传输;
2024-10-05 17:44:36
905
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅