自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(144)
  • 收藏
  • 关注

原创 仿Muduo库实现高并发服务器——综合模块

总模块:将介绍项目的。子模块:对项目中各个模块进行细致代码讲解,。关于各个模块中的知识点技术都会采用链接的形式为大家讲解,大家可直接在评论区进行留言。

2024-08-22 19:03:33 1060

原创 仿Muduo库项目整体代码

关于仿Muduo库项目测试代码后续更新。

2024-08-22 10:48:12 317

原创 仿Muduo库实现高并发服务器——TcpServer模块

对于TcpServer对象设置回调函数,其实最终会被设置到Connection对象上,而每个客户端对于一个Connection对象。启动非活跃连接销毁,Tcpserver对象默认是关闭非活跃连接销毁的,添加定时任务下面会讲。TcpServer对象创建后,就需要调用Start()函数进行线程池的创建,以及主线程EventLooop对象的运行,这个就是死循环。

2024-08-22 10:30:35 1030

原创 仿Muduo库实现高并发服务器——Acceptor模块

Acceptor模块是为了创建套接字,并且接收新到来的客户端套接字,将对应套接字的Channel对象添加到Poller对象中,进行事件监控。

2024-08-22 09:52:42 660

原创 仿Muduo库实现高并发服务器——Connection模块

这个模块看着代码挺多的实则真的很多,但是不难,我为大家将各个函数拿出来理一理。connection就是将主线程监听的网络套接字上的客户端套接字进行包装,使被包装的套接字可以进行,各种事件的处理,比如读写事件。下面就来详细看看。Connection模块刚开始,就继承了一个类enable_shared_from_this,。

2024-08-22 07:30:00 1452

原创 仿Muduo库实现高并发服务器——LoopThreadPool模块

这个模块需要具备那些基础知识。线程创建相关操作,锁,条件变量。

2024-08-21 18:08:37 459

原创 仿Muduo库实现高并发服务器——EventLoop模块

我刚开始看这个模块时,也是看不明白,什么是事件管理模块。此时此刻,大领导的背影,还是那么清晰。,慢慢理。

2024-08-21 16:43:42 1094

原创 仿Muduo库实现高并发服务器——Server.hpp框架的简单描述

下面这张图 是channel模块,poller模块,TimerWheel模块,EventLoop模块,LoopThreadPool模块进行组合。便于大家对这个项目的理解,因为代码看起来挺复杂的。下面这个图,加入了Connection模块,Buffer模块,socket模块,Acceptor模块,Tcpserver模块。算是将server.hpp,进行了框架描述。

2024-08-21 14:36:59 1440

原创 仿Muduo库实现高并发服务器——任务定时器模块

下面这张图 是channel模块,poller模块,TimerWheel模块,EventLoop模块,LoopThreadPool模块进行组合。便于大家对这个项目的理解,因为代码看起来挺复杂的。上面右下角就是定时器模块。

2024-08-21 12:40:27 962

原创 仿Muduo库实现高并发服务器——事件监控Poller模块

下面这张图 是channel模块,poller模块,TimerWheel模块,EventLoop模块,LoopThreadPool模块进行组合。便于大家对这个项目的理解,因为代码看起来挺复杂的。

2024-08-13 17:12:50 305

原创 仿Muduo库实现高并发服务器——Channel模块

Channel模块在本项目中的使用。Channel是进行事件处理的,将要监控什么事件通过_events成员变量进行设置,再通过_revents成员变量对就绪的事件进行处理,调用对应的回调函数。为什么要这样处理呢?原因是,它是用I/O复用进行实现的,具体细节在。_events和_revents中的每一个比特位都表示一个事件。取消事件和设置事件都是对_events进行位操作。

2024-08-13 15:50:25 446

原创 仿Muduo库实现高并发服务器——socket网络通信模块

服务端:socket(),bind(),listen(),accept().客户端:socket(),connect().下面这段代码,没什么好讲的,就不再讲了。

2024-08-13 15:22:33 325

原创 仿Muduo库实现高并发服务器——Buffer模块

Buffer模块建议描述图。关于Buffer模块主要就是信息的读取写入。这个模块在Connect模块中使用,作为输入输出缓冲区进行使用。以下是这个模块在本项目中的作用。

2024-08-13 14:54:33 313

原创 简单日志的设计Log.hpp

首先,日志要有等级,我不能不知道到底打印什么样的的信息(正常信息,调试信息,错误信息其次,要有时间,什么时候打的我总要知道吧;那个文件的那一行打的;打的什么信息我总要知道。我们最终呈现出来的日志打印。红:那个线程绿:时间蓝:文件名称以及哪一行黄:打印的信息。

2024-08-13 14:16:21 342

原创 Linux网络通信基础API

这篇文章只有Linux网络通信基础API大参数信息,和返回值,这篇文章并没有这些基础API的参数类型介绍。accept的第二个参数可以查看客户端信息。

2024-08-12 18:53:07 1088

原创 I/O复用

I/O复用使得程序能够同时监听多个文件描述符,这对提高程序的性能至关重要。

2024-08-11 23:56:46 648

原创 仿Muduo项目相关介绍——OneThreadOneLoop式Reactor模型

仿Muduo库实现高并发服务器它是基于One Thread One Loop式主从Reacto模型来实现的。那有人就会问 One Thread One Loop式是怎么回事?那主从Reactor模型又是什么?先别急,我们先要知道什么是线程?线程是cpu执行或调度任务的基本单位,进程是操作系统分配资源的基本单位。为什么要说这个?那是因为One Thread One Loop式就是一个主线程 和 一个线程池来实现的。

2024-08-11 21:10:19 309

原创 Git 相关操作

首先创建一个目录 用于存放git下的代码 并进入这个目录。

2024-08-11 17:02:20 303

原创 Boost搜索引擎:网络模块的构建

每个网页界面都有他相应的代码构成 按F12键 就会出现.html文件代码。

2024-08-09 18:49:19 492

原创 Boost搜索引擎:项目整体代码及布局

例如:dict -> /home/dz/...这是建立的动态链接 方便编译器查找 你也可将所安装的开发工具放到当前目录下,最终还是要在你代码中包含,所以你只需在你代码中科院指明要包含开发工具的头文件等就可以了,不是非要构建动态链接。

2024-08-09 18:19:16 496

原创 进程程序替换 (进程夺舍)

用fork创建子进程后,但有可能执行不同的代码分支),。当进程调用一种时,该进程的用户空间代码和数据,从新程序的启动 例程开始执行。exec系列函数用要执行的程序去替换原有的程序。

2024-08-09 10:21:24 303

原创 Linux进程创建/终止/等待

进程创建在Linux中fork函数是非常重要的,它是在已存在的进程中创建一个新的进程。新进程为子进程,而创建进程的进程是父进程。fork()返回值接下来就通过代码的方式来感受一下,fork函数的使用。以上就是简易代码:id就是fork函数的返回值。父进程返回:0子进程返回:一个大于零的数 (这个数是不固定的)由上图可知,创建进程时,fork返回的大于0的值就是子进程的id。getpid():获取调用getpid的进程idgetppid():获取调用者父进程的id。

2024-08-08 22:56:47 1031

原创 Gcc/G++编译C/C++文件(主要以C++语言为主,C语言就做阐述 用法一样 就是将G++换成GCC)

会生成目标文件此时hello就是可执行的二进制程序。

2024-08-03 20:00:04 482

原创 Qt 安装过程 图片比较多 非常容易看懂

上面是翻译文件用的 将你写的文件翻译给那些不懂得中文的人看。安装完成后 在你系统应用中会出现这几个文件。与国际化相关 如果项目走向国际就会涉及这些。

2024-08-03 17:38:34 265

原创 Ubuntu-22.04环境搭建

将下列国内镜像源 写入原来的/etc/apt/source.list⽂件(注意格式 防止格式出错)先备份原来的/etc/apt/source.list⽂件。当然,你遇到的问题也许不是我所遇到的。Muduo库克隆的时候可能会有点慢。但是我替换了软件源 感觉挺快的。

2024-08-03 08:43:27 1198

原创 ubuntu环境下 安装jsoncpp

jsoncpp的认识json 是一种,采用完全独立于编程语言的文本格式来存储和表示数据。例如:小明同学的学生信息。

2024-08-01 09:07:58 632 6

原创 Boost搜索引擎:关键词搜索模块的构建

在讲struct InvertedElemPrint结构体时,我就提过摘要的获取.int weight;这里详细讲一下,对于words容器中存的是用户传上来的搜索关键词,是部分也可能是全部,这不重要。我们在实现摘要提取时,是以words中第一个关键词为准。这里有人会问,为什么这样做?原因是:我想这么做,图方便。但是有没有更优的办法,当然有,不然我也不肯提这个问题。那怎么做呢?continue;//不完美的地方:暂时可以交给大家 , 你/是/一个/好人 100。

2024-07-24 08:59:26 1236

原创 Boost搜索引擎:如何建立 用户搜索内容 与 网页文件内容 之间的关系

正排索引就是文档ID与文档之间的关系。正排索引文档ID文档内容0文档11文档2正排索引的建立,就是将文档ID与文档内容之间进行直接关联。如上表所示。那问题来了,该如何关联呢?我们可以利用线性表,如数组,数组下标与文档ID正好是对应的,我们将解析出来的数据进行提取,存放到一个包含 标题(title),内容(content),url(网址信息)的结构体,再将结构体放到数组中,这样就建立好了正排索引。

2024-07-23 23:44:55 1974

原创 .html网页文件:标题,内容,url的提取

对下载下来的文件做处理,将网页文件中的,,都提取出来。读取文件:既然是对网页文件做搜索,就需要程序中有网页文件。所以就需要将网页文件从下载的目录中,读到程序中,也就是读到内存储存起来,方便后续的处理。那如何对文件进行读取呢?这里只记录。通过使用boost::filesystem提供的迭代器和成员函数实现对目录文件的便利。。

2024-07-22 09:31:45 1875

原创 cpp-httplib的获取

下面说,这个库是阻塞I/O,如果你想要非阻塞I/O这不是你想要的库。只需将这个头文件拷贝到你项目路径,你在代码中引入头文件即可。你的代码只需要包含httplib.h。具体使用可以参考该库的使用样例。

2024-07-22 09:06:27 272

原创 Boost搜索引擎数据的获取

我们要的网页文件数据就在 booost_1_85_0 / doc / html目录下,我们只需要将,该目录下的所有文件拷贝到我们项目所在路径下,作为数据源,进行接下来一步的解析(.html)网页文件。在Boost搜索引擎项目介绍时,我们就简单提到,因为Boost官方网站不具备搜索功能,我们就借此实现搜索引擎项目,该项目的数据来源是Boost官方文档中的(.html)网页文件。红色框中,就包含我们要的网页文件,将他上传到我们的服务器,这里我用的是Xshell,具体情况以你们那里为准。

2024-07-22 00:05:29 359

原创 Boost搜索引擎项目相关介绍

首先,Boost库不具备搜索条件,所以我们这个项目借此实现搜索功能。项目的核心就是以用户搜索的相关内容在目标数据中进行查找。首先,我们面临的第一大难题就是目标数据,在这里目标数据就是Boost库网页文件(.html),对于网页文件(.html)我们需要了解它的结构,方便后边提取内容,这个过程在后面的文件数据处理模块进行详细讲解。其次就是如何将用户搜索内容和网页文件提取之后的内容进行相关的联系。比如,用户搜索一个关键词,如何在网页文件中查找到对应的数据;

2024-07-21 23:24:17 634

原创 C++分词工具:Jieba分词

这里简单介绍以下cppjieba,cppjieba是一款分词工具。如下图用户输入一句话,cppjieba分词工具会将这句话进行有规则的分割。下面就带大家进行安装。cppjieba代码仓库将上面的代码仓库克隆到你服务器上。因为我已经克隆过了,所以显示已经存在该文件了。克隆好之后,你所在的目录中会存在对应的文件(cppjieba)。include:里面包含着各种头文件。dict:包含着字符集等信息,因为测试案例中用到了,我没做太多了解。同时,cppjieba库中还提供了,各种案例。

2024-07-21 13:46:14 1210

原创 ProtoBuf的安装(win+ubuntu+centos版本)

上方链接就是ProtoBuf官方在Github上面的仓库,我这里下的是21.11版本,至于你要下哪个版本,可以根据自己的需要去下载。首先点击链接,进入首页,向下滑就可以找到ProtoBuf的各种版本。下载选择将对应的文件下载下来,进行解压。然后将解压的bin目录下的.exe执行文件,添加到环境变量当中。然后,反复确认就行了,怎么验证呢?打开win命令窗口,win+r ->cmd就进入了。

2024-07-18 15:24:54 591

原创 Boost搜索引擎

此项目的目的就是为了体现搜索功能,并不是为实现什么搜索,因为搜索需要资源,如要搜索的内容,设备需要存储搜素内容所需要的资源等,条件的限制,所以本项目就是通过对Boost库网页文件(*。代码解析:首先用文件目录src_path实例化root_path对象,在判断该对象存不存在,不存在就没必要再向下执行,将迭代器用src_path目录进行实例化,再用迭代器去递归式的遍历该目录文件,如果不是普通文件或者不是网页文件,就不进行读取,反之,将网页文件读取到file_list文件链表中。相当于形成了⼀个官网链接。

2024-07-12 09:01:15 1279

原创 智能指针的认识和应用

观察上述代码,不管什么情况,auto_ptr都会将所管理的对象的指针置给自己,再将管理对象置为nullptr,那么如果别人将目标对象提前拷贝了一份,他的使用在你调用析构函数之后,那不就成为野指针了,通过下列拷贝构造,和赋值重载都可以看出。简单来说,就是C++带来的便利,C++的构造函数和析构函数,主要是析构函数(在该对象作用,析构函数不会调用,出了作用域,析构函数会自动执行,去释放对应的资源,这就不需要你再去手动释放了)。于是,就设计出了,weak_ptr,就是去解决shared_ptr循环引用问题的。

2024-07-11 16:24:59 1091

原创 MySQL基础篇(三)数据库的修改 删除 备份恢复 查看连接情况

要在备份的路径下,执行上述命令,这里可以看出,该命令允许,原数据库名和要备份的数据库名是可以不一样的,只要你能分清楚就行。执行完该数据库就不存在了,对应数据库文件夹被删除,级联删除,里面的数据表全部被删除。以上就是关于数据库的备份操作,还是那句话,不要随便删除数据库,删掉之后啥都没了。所以说,删除数据库之前,要对数据库里面的数据进行备份,如果后悔还可以回复。以上就是 数据库的修改 删除 备份恢复 查看连接情况的操作讲解。对数据库的修改主要指的是修改数据库的字符集,校验规则。首先将test1数据库删除。

2024-07-06 22:02:45 354 1

原创 MySQL基础篇(二)字符集以及校验规则

注意这是针对整个数据库的,同一个数据库中存的数据,都遵循这个数据库的字符集和校验规则。首先,我们需要了解校验规则的特性,utf8_general_ci(不区分大小写),utf8_bin(区分大小写)。创建时,没有指明字符集和校验规则,系统默认采用:字符集:utf8,校验规则:utf8_general_ci。存储时,数据库会利用设置的字符集进行存储,读取时,必须采用对应的校验规则进行读取,否则可能会出错。红色框:可省略,作用如果存在相同的数据库名称,就不会再创建,反之,创建。字符集主要是控制用什么语言。

2024-07-06 20:49:36 704

原创 MySQL基础篇(二)

如果不使用数据库去创建表,是创建不了的,因为系统不知道表该存到哪里。首先我们先创建一个数据库,然后使用这个数据库,去存储一张表。以上就是Mysql简单的基础命令操作,后续还会一一介绍。既然我们已经创建了一张表,那接下来就向表中插入数据。接下来让我带大家创建一个数据库。

2024-07-06 19:53:01 232

原创 Redies基础篇(一)

例如:当前有1W条请求,负载均衡算法(不同的算法会产生不同的效果)会将这些请求较均匀的分布给每一个应用服务器(可以有多台服务器),这样该系统的资源也就得到了相对的缓解。上图的应用服务器和存储服务器,是独立的机器,也就是分布式系统,将大量的资源集中起来,共同解决资源短缺的问题。比如说:CPU,服务器每次收到一个请求,都会消耗CPU的资源,如果同一时刻,有大量的访问,CPU资源不够用怎么办。一个主机上面能增加的硬件资源是有限的,这取决于主板的扩展能力,那如果增加到主板的极限还是不够那又该怎样处理。

2024-07-06 18:56:09 513

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除