- 博客(273)
- 收藏
- 关注
原创 【RabbitMq C++】消息队列组件
RabbitMQ 是一个基于 AMQP 协议的消息队列组件,用于实现客户端之间的消息传输。它通过交换机、队列和绑定等核心概念,提供灵活的消息转发功能。RabbitMQ 解决了传统直接通信的安全性和效率问题,通过消息队列服务器作为中间层,确保消息的可靠传输。安装 RabbitMQ 包括服务器和 C++客户端库 AMQP-CPP 的配置,AMQP-CPP 支持多种网络通信模式,如 TCP 和异步通信组件(如 libev)。使用 AMQP-CPP 时,可以通过继承 AMQP::TcpHandler 类并重写相关函
2025-05-14 09:57:41
1370
73
原创 【JsonCpp、Muduo、C++11】JsonCpp库、Muduo库、C++11异步操作
Jsoncpp 库主要是用于实现 Json 格式数据的序列化和反序列化,它实现了将多个数据对象组织成为 json 格式字符串,以及将 Json 格式字符串解析得到多个数据对象的功能。Json::Value类:中间数据存储类如果要将数据对象进行序列化,就需要先存储到Json:Value对象中如果要将数据传进行反序列化,就是解析后,将数据对象放入到Json:Value对象中//Value重载了[]和=,因此所有的赋值和获取数据都可以通过//简单的⽅式完成val["name"] = "xx";
2025-05-06 10:09:11
1300
102
原创 【仿Mudou库one thread per loop式并发服务器实现】服务器边缘测试+性能测试
webbench测试原理是,创建指定数量的进程,在每个进程中不断创建套接字向服务器发送请求,并通过管道最终将每个进程的结果返回给主进程进行数据统计。假设现在 12345描述符就绪了, 在处理1的时候花费了30s处理完,超时了,导致2345描述符因为长时间没有刷新活跃度。给服务器发送一个数据,告诉服务器要发送1024字节的数据,但是实际发送的数据不足1024,查看服务器处理结果。超时连接测试1:创建一个客户端,给服务器发送一次数据后,不动了,查看服务器是否会正常的超时关闭连接。
2025-04-27 10:54:47
1989
102
原创 【仿Mudou库one thread per loop式并发服务器实现】HTTP协议模块实现
这个模块是一个HTTP请求接收的上下文模块,主要是为了防支在一次接收的数据中,不是一个完整的HTTP请求,则解析过程并未完成,无法进行完整的请求处理,需要在下次接收到新数据后继续根据上下文进行解析,最终得到一个HttpRequest请求信息对象,因此在请求数据的接收以及解析部分需要一个上下文来进行控制接收和处理节奏。当服务器收到了一个请求,就在请求路由表中,查找有没有对应请求的处理函数,如果有,则执行对应的处理函数即可。这个模块是HTTP请求数据模块,用于保存HTTP请求数据被解析后的各项请求元素信息。
2025-04-21 12:02:13
2477
102
原创 【仿Mudou库one thread per loop式并发服务器实现】SERVER服务器模块实现
客户端异常退出,比如断电断网,客户端底层操作系统没有办法及时服务器进行四次挥手,因此服务器也收不到任何信息,除非服务器主动去读或者写,客户端会给服务器发送一个RST,服务器读写的返回值都是-1,错误码设置为ECOMNNRESET,并且在epoll模型下的服务器会触发EPOLLERR和EPOLLHUOP事件。这里还有一个注意点:当事件就绪,需要处理的时候,处理过程中,如果对连接要进行某些操作:这些操作必须在EventLoop对应的线程中执行,保证对连接的各项操作都是线程安全的。
2025-04-16 09:38:15
2053
100
原创 【仿Mudou库one thread per loop式并发服务器实现】项目介绍+前置技术知识点
仿muduo库One Thread One Loop式主从Reactor模型实现高并发服务器这个项目是通过咱们实现的高并发服务器组件,可以简洁快速的完成一个高性能的服务器搭建。并且,通过组件内提供的不同应用层协议支持,也可以快速完成一个高性能应用服务器的搭建。在这里,要明确的是咱们要实现的是一个高并发服务器组件,因此当前的项目中并不包含实际的业务内容。
2025-04-11 09:49:05
1970
75
原创 【Boost搜索引擎】下
这一模块主要提供建立索引,以及收到用户的发起的http请求通过Get方法提交的搜索关键字,然后对关键字进行分词,先在倒排索引中查找到对应关键字的文档ID,然后在正排索引中根据文档ID,找到多个相关文档内容,拼接返回给用户。这里使用到了Josn库,Jsoncpp 库用于实现 json 格式的序列化和反序列化。安装Json库上面代码还有一个问题!如果你有一个文档是 :今天晚上吃米饭。分词:今天/晚饭/吃米饭/米饭。建立倒排索引,假设每个关键字对应的文档ID都是100假如你搜索的关键字也是,今天晚饭吃米饭。
2025-04-02 16:56:59
1774
112
原创 【Boost搜索引擎】上
目前我们熟知的搜索引擎有:百度,360,搜狗等,它们所作的都是全网搜索 。而我们接下来做的是站内搜索,搜索数据更垂直,数据量其实更小。以前Boost库是没有搜索的,不过现在是有了,但没关系,重要的是虽然我们做的是Boost搜索引擎,但如果掌握了,可以改成任何一个搜索引擎。
2025-03-27 10:37:13
2313
119
原创 【高并发内存池】细节处理 + 性能优化 + 总结
STL容器是线程不安全的,多线程在并发用unordered_map的时候会有线程不安全的问题,在PageCache中对unordered_map写之前我们加锁了,但是在读unordered_map我们并没有加锁。这样我们就知道通过释放内存块的地址,转变成页号,在找到对应的Span,拿到_objsize就知道这个内存块大小了。写是在PageCache是加过锁的,读的时候就是在释放的时候去读,在读这个Span的时候,这个Span早在拿它的时候就写过了。,所有就减少了读写并发的问题,也就少了很多加锁解锁。
2025-03-13 11:04:17
1485
130
原创 【高并发内存池】项目介绍 + 定长内存池 + 整体框架设计
当前项目是实现一个高并发的内存池,他的原型是google的⼀个开源项目tcmalloc,tcmalloc全称Thread-Caching Malloc,即线程缓存的malloc,实现了高效的多线程内存管理,用于替代系统的内存分配相关的函数(malloc、free)。我们这个项目是把tcmalloc最核新的框架简化后拿出来,模拟实现出一个自己的高并发内存池,目的就是学习tcamlloc的精华。所谓“池化技术”,就是程序先向系统申请过量的资源,然后自己管理,以备不时之需。
2025-03-01 10:27:58
1422
198
原创 2024年博客之星主题创作|2024年度感想与新技术Redis学习
2024学习了很多计算机知识,有C、数据结构、C++、Linux系统编程和网络编程、数据库、高阶数据结构、算法,虽然也学习到了很多让自己从计算机小白到掌握一点计算机知识,但是对于一个程序猿来说是远远不够的,我们应该不断学习新的前沿知识不至于让新型技术把自己淘汰,2025新的一年开始,就从Redis开始继续在CSDN记录自己学习到的知识。
2025-01-22 12:13:39
1791
157
原创 【MySQL】复合查询+表的内外连接
前面我们讲解的mysql表的查询都是对一张表进行查询,在实际开发中这远远不够,未来可能还有多表查询,子查询。
2025-01-17 23:52:59
3383
83
原创 【Git原理与使用】Git初识&&基本操作
为了能够更方便我们管理这些不同版本的文件,便有了版本控制器。所谓的版本控制器,通俗的讲就是一个记录每次修改和版本迭代的一个管理系统,同时也方便多人协同作业。目前最主流的版本控制器就是 Git 。Git 可以控制电脑上所有格式的文件,例如 doc、excel、dwg、dgn、rvt等等。对于我们开发人员来说,Git 最重要的就是可以帮助我们管理软件开发项目中的源代码文件!
2024-09-30 10:41:15
3163
89
原创 【高阶数据结构】跳表
skiplist本质上也是一种查找结构,用于解决算法中的查找问题,跟平衡搜索树和哈希表的价值是一样的,可以作为key或者key/value的查找模型。那么相比而言它的优势是什么呢?这么等我们学习完它的细节实现,我们再来对比。skiplist是由William Pugh发明的,最早出现于他在1990年发表的论文《Skip Lists: Askiplist,顾名思义,首先它是一个list。实际上,它是在有序链表的基础上发展起来的。如果是一个有序的链表,查找数据的时间复杂度是O(N)。
2024-09-11 10:07:06
1630
94
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人