- 博客(21)
- 资源 (1)
- 收藏
- 关注
原创 C语言实现http服务器(一)
在实现http服务器之前,我们先需要一个可以接收数据和发送数据的tcp服务器。网络连接上消息处理可以分为两个阶段:1. 等待消息准备好 2. 消息处理。对于高并发tcp服务器来说,将上述两个阶段分开是最好的选择。等待消息如何做到?就引出了I/O多路复用,使用一个I/O复用来监督多个网络连接,当网络连接上出现可用事件时,则I/O多路复用可返回相应的连接。对于一个I/O复用来说,需要关注的是三种事件:1. I/O事件 2. 定时器事件 3. 信号。
2022-11-25 14:23:00
2822
原创 前缀树Trie
前缀树(字典树),是一种多叉树。一般用于查找和存储字符串,这种数据结构可以很快查询到一个字符串出现过几次,一个前缀出现过几次。例如字符串"aa","ab","aab","aac","bc"组成的前缀树如下图所示。多叉树的每条边代表出现的字符,节点中可以根据所要实现的功能加入不同的数据。如上图所示,若有一条边经过一个节点,则该节点p值+1,若有一条路径以此节点结束,则该节点e值+1。...
2022-08-01 23:10:41
219
原创 设计模式(一):模版方法模式
定义一个操作中的算法的骨架,将一些步骤延迟到子类中。模版方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。模版方法的本质为封装代码中的变化点(算法骨架为稳定点,算法中的一些具体步骤实现为变化点),通过固定算法骨架来约束子类的行为。...
2022-07-29 11:45:27
156
原创 半同步/半反应堆模型以及简单实现(二)
该模型不同于前文提到的半同步/半反应堆模型半同步/半反应堆模型以及简单实现(一)1. one thread one loop。主线程和每个工作线程之间都维持自己的事件循环,它们各自监听和处理不同的事件。2. 主线程只管理监听socket,连接socket由工作线程来处理。当有新的连接到来时,主线程就接受并将新返回的socket派发给某个工作线程,此后该socket上的任何I/O操作都由被选中的工作线程来处理。3. 主线程接受连接socket后,向工作线程的任务队列中插入一个任务,并且发送管道消息。工作线程检
2022-07-14 17:48:18
441
原创 Linux C/C++定时器实现与原理(一)——链表
一. 定时器简介服务器程序一般需要处理三种时间,分别是:网络I/O事件,信号事件,定时器事件。一个服务器往往需要同时管理多个定时事件,所以需要一个数据结构有效的管理定时事件,以实现对于定时事件的统一管理。二. 定时器通用接口一般来说,定时器都需要以下接口方便对于定时器的管理。同时,定时器节点中的元素至少有超时时间和超时要执行的回调函数。三. 链表定时器的实现...
2022-04-29 11:44:25
690
原创 半同步/半反应堆模型以及简单实现(一)
一.半同步/半反应堆模型简介在半同步/半反应堆模型下,主线程为异步线程,主要负责监听所有的事件 。1. 如果事件为连接事件:主线程负责将连接请求接收并且向epoll内核事件表中注册事件。2. 如果事件为非连接事件:主线程负责将连接请求加入请求队列,线程池中的工作线程通过竞争来执行请求队列中的任务。以上模型也存在一定的缺点:1. 首先请求队列是唯一的,那么请求队列在其中便扮演了临界资源的角色。对于临界资源...
2022-04-25 18:16:44
1068
原创 epoll并发回声服务器实现(三)
服务端:#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <sys/socket.h>#include <sys/epoll.h>#include <arpa/inet.h>#define PORT "12345"#define BUFFER_SIZE 1024void error_
2022-02-16 17:10:13
560
原创 Select并发回声服务器实现(二)
服务端:#include <stdio.h>#include <stdlib.h>#include <string.h>#include <sys/socket.h>#include <sys/select.h>#include <sys/time.h>#include <unistd.h>#include <arpa/inet.h>#include <math.h>#defi
2022-02-16 16:04:14
107
原创 多进程回声服务器实现(一)
服务端:#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <sys/socket.h>#include <signal.h>#include <arpa/inet.h>#define PORT "10000"#define BUFFER_SIZE 1024#define TRUE 1
2022-02-12 21:47:23
827
原创 Windows+VMWare搭建简单的Linux环境
一. 前言Q: 为什么要安装Linux操作系统?A: 目前大多数的服务器程序都是跑在Linux操作系统上的,并且Linux的系统调用和Windows之间有一定的区别,所以学习在Linux上搭建开发环境并且学习网络编程是有必要的。二. 环境配置1. 安装VMWare链接:http://链接: https://pan.baidu.com/s/1i1WB9qCnI6_lZHOtzqYdPg 提取码: cn0e --来自百度网盘超级会员v4的分享2. 安装Ubuntu...
2022-01-25 22:17:54
886
原创 Mac下使用CLion+Qt+MySQL实现一个推箱子游戏(一)——环境配置
前言: 此版本的推箱子游戏为上一个版本的升级,通过数据库实现了用户的登陆和注册,并且实现了关卡的跳转,将游戏中的玩家数据和地图数据存入数据库中.实现效果为:(上一个版本链接:Qt实现简单的推箱子游戏_supermario19的博客-CSDN博客_qt推箱子)一. 环境配置1. 下载CLion这个没什么难度,Mac下CLion默认是Clang编译器,如果想换到GCC编译器的同学可以参考这一篇文章:CLion for Mac(m1)配置...
2021-09-24 00:38:35
1217
3
原创 C++含有虚函数类对象模型(一)——父类对象模型
一. 示例代码Father.h#ifndef TEST1__FATHER_H_#define TEST1__FATHER_H_class Father { public: virtual void func_1(); virtual void func_2(); virtual void func_3(); private: int x = 1; int y = 2;};#endif //TEST1__FATHER_H_Father.cpp#incl
2021-09-03 00:36:51
454
2
原创 Mac(m1)下载MySQL+DataGrip配置
1. Homebrew下载参考文章:https://blog.csdn.net/supermario19/article/details/118500383?spm=1001.2014.3001.55012. 使用Homebrew下载MySQL1. 进入homebrew网站2. 搜索栏输入mysql结果可以发现,默认版本为8.0.26 并且是支持m1芯片苹果的.打开命令行输入:brew install mysql输入命令:mysql --ver...
2021-08-26 21:03:27
2428
2
原创 UML中的聚合和组合(带C++简单实现例子)——组合
一. 组合 组合关系: 组合关系代表着整体和部分具有相同的生命周期, 部分不能脱离整体而存在. 举一个最简单的例子(可能并不是很严谨):人和人的大脑之间的关系就是一种组合关系, 脱离了人体, 大脑不能单独存在, 人的生命周期结束, 大脑的生命周期随即结束. 组合关系的UML图如下所示: 上图表示class People和class Heart为一个组合关系, 可称为Heart组合到People上, 或者People由Heart组合...
2021-08-19 23:44:57
2085
原创 浅析C++中的深浅拷贝
一. 背景首先看这样一个问题,在Car类中聚合了Engine类二. 代码实现下面给出类Car与类Engine的定义Car.h#ifndef COPY__CAR_H_#define COPY__CAR_H_#include "Engine.h"#include <string>using namespace std;class Car { public: // 构造函数 Car(); Car(string brand, int...
2021-08-18 21:45:32
174
1
原创 CLion for Mac(m1)配置GCC编译器
条件:电脑已经下载过XCode一. 下载HomeBrewhomebrew是一款macos,linux下的包管理工具,我们需要使用他来下载GCC下载方法:1.打开终端(terminal)2.输入/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"ps.有可能会遇到的问题我当初下载挂了VPN,CSDN上还有很多解决问题的方法,可以将错误信
2021-07-05 23:37:02
6847
12
原创 Qt实现简单的推箱子游戏
一. 实现效果图:初始:箱子放到正确的位置:游戏失败:游戏成功:二. 工程目录三. 代码mainwindow.h#ifndef MAINWINDOW_H#define MAINWINDOW_H#include "map.h"#include "person.h"#include "postion.h"#include <QMainWindow>#include <QPaintEvent>#include &l...
2021-07-05 00:09:18
7080
9
转载 C++Primer(第五版)Sales_item.h源码
/* * This file contains code from "C++ Primer, Fifth Edition", by Stanley B. * Lippman, Josee Lajoie, and Barbara E. Moo, and is covered under the * copyright and warranty notices given in that book: * * "Copyright (c) 2013 by Objectwrite, Inc., Jose.
2021-06-21 22:56:53
327
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人