【git】【网络】【项目配置运行】HTTP 协议的微型简易 Web 服务器---tinyEasyMuduoWebServer
【git】【网络】【项目配置运行】HTTP 协议的微型简易 Web 服务器—tinyEasyMuduoWebServer
csdn项目:
原文链接:https://blog.csdn.net/weixin_45178775/article/details/122257814
github链接:https://github.com/wyewyewye/tinyEasyMuduoWebServer/blob/main/README.md
项目介绍:项目基于C++语言、陈硕老师的muduo网络库、mysql数据库以及jsoncpp,服务器监听两个端口,一个端口用于处理http请求、另一个端口用于处理发送来的json数据。
1 项目环境配置
1.1 必需依赖项
执行以下命令来安装所需的依赖项。
sudo apt-get install libjsoncpp-dev
sudo apt-get install mysql-server mysql-client
1.2 数据库配置
参考 https://www.cnblogs.com/wuhou/archive/2008/09/28/1301071.html
由于mysql和json我电脑已经配过了,此处不多赘述。
1.3 muduo库配置
1.3.1 环境要求
modu库github链接:https://github.com/chenshuo/muduo?tab=readme-ov-file
要求:
Linux内核版本> = 2.6.28。
GCC >= 4.7 或 Clang >= 3.5
Boost(仅适用于 boost::any。)
1.3.2 所需依赖
安装所需的软件包:
sudo apt install g++ cmake make libboost-dev
一次性安装编译 C++ 项目和使用 Boost 库所需的工具和依赖。
1.3.3下载并配置
1. 确保依赖已安装
modu 依赖 libevent,所以先安装 libevent:
sudo apt update
sudo apt install libevent-dev -y
sudo apt install -y cmake g++ libboost-all-dev libprotobuf-dev protobuf-compiler
2. git clone
git clone https://github.com/chenshuo/muduo.git
3. 用 cmake 进行编译
cd muduo
mkdir build && cd build
cmake ..
make -j$(nproc)


4.拷贝编译好的文件到系统目录
如 /usr/local/bin/, /usr/local/lib/
sudo make install

2 运行和代码修改
2.1 数据库表添加和数据添加
1.运行数据库
mysql -uroot -p
show databases;

2.创建license_plate数据库(代码里写的这个)
create database license_plate;

3.创建数据库表cars
USE license_plate;
CREATE TABLE cars (id INT AUTO_INCREMENT PRIMARY KEY,license_plate VARCHAR(20) NOT NULL,time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,ip VARCHAR(20) NOT NULL
);

4.插入数据
INSERT INTO carss (license_plate, ip) VALUES
('ABC1234', '192.168.1.1'),
('XYZ9876', '192.168.1.2'),
('LMN4567', '192.168.1.3');

2.2 代码修改为自己主机配置
数据库连接:修改为自己的

IP和端口:这里要注意端口设置 最好为常见的 Web 端口,比如:
80(HTTP 默认端口)
8080(常见 Web 开发端口)
8888(备用端口)
别的端口要另外配置

2.编译文件
编译命令:(这个贴出来了需要编译的文件是什么)
g++ httpcontext.cpp httprequest.cpp httpresponse.cpp httpserver.cpp jsonprocess.cpp sqlconnection.cpp main.cpp -o my_server \-lmuduo_net -lmuduo_base -lpthread -ljsoncpp -lmysqlclient
或者这个:
g++ *.cpp -o my_server \-lmuduo_net -lmuduo_base -lpthread -ljsoncpp -lmysqlclient
这些是 链接选项,用于在编译时链接 Muduo、JSON解析库、MySQL客户端库 和 线程库。下面是每个选项的详细解释:
1. -lmuduo_net
- 作用:链接 Muduo 的网络模块,用于创建 TCP 服务器、TCP 客户端等网络编程功能。
- 主要包含:
muduo/net/TcpServer.h(TCP 服务器)muduo/net/TcpClient.h(TCP 客户端)muduo/net/EventLoop.h(事件循环)
2. -lmuduo_base
- 作用:链接 Muduo 的基础模块,提供日志、线程、定时器等功能。
- 主要包含:
muduo/base/Logging.h(日志)muduo/base/ThreadPool.h(线程池)muduo/base/TimeStamp.h(时间戳)
3. -lpthread
- 作用:链接 POSIX 线程库,提供多线程支持。
- 主要用于:
- 创建 多线程服务器
- 使用 Muduo 线程池
- 处理 并发任务
4. -ljsoncpp
- 作用:链接 JSON 解析库
jsoncpp,用于解析和生成 JSON 数据。 - 主要用于:
- 读取 JSON 配置文件
- 解析 API 返回的 JSON 数据
- 生成 JSON 数据发送到前端
5. -lmysqlclient
- 作用:链接 MySQL 客户端库,用于 C++ 连接 MySQL 数据库。
- 主要用于:
- 查询数据库
- 执行 SQL 语句
- 存储数据
总结
| 链接选项 | 作用 |
|---|---|
-lmuduo_net | Muduo 网络库(TCP 服务器、客户端) |
-lmuduo_base | Muduo 基础库(日志、线程池、定时器) |
-lpthread | POSIX 线程库(多线程支持) |
-ljsoncpp | JSON 解析库(JSON 读写) |
-lmysqlclient | MySQL 客户端库(连接数据库) |
3.运行结果

同一台Ubuntu访问:

同一台公网下另一台电脑的windows:

大概配置运行是这样子的,我们发现他项目里面的两个.pro文件没有用处,界面直接在main里面写的html,可能是用qt打开时有用吧,但是具体我qt删了没法测试。
这个是项目配置 最近大概看看逻辑 后续可能会写一下实现逻辑
相关文章:
【git】【网络】【项目配置运行】HTTP 协议的微型简易 Web 服务器---tinyEasyMuduoWebServer
【git】【网络】【项目配置运行】HTTP 协议的微型简易 Web 服务器—tinyEasyMuduoWebServer csdn项目: 原文链接:https://blog.csdn.net/weixin_45178775/article/details/122257814 github链接:https://github.com/wyewyewye/tinyEasyMuduo…...
每周一个网络安全相关工具——MetaSpLoit
一、Metasploit简介 Metasploit(MSF)是一款开源渗透测试框架,集成了漏洞利用、Payload生成、后渗透模块等功能,支持多种操作系统和硬件平台。其模块化设计(如exploits、auxiliary、payloads等)使其成为全球…...
Python入门———条件、循环
目录 语句 顺序语句 条件语句 缩进和代码块 判断年份是否是闰年 空语句 pass 循环 while 循环 求5的阶乘: 求1!2!3!4!5! for循环 打印1-10 打印2,4,6,8&#x…...
InDraw6.2.3 | 甾体、核苷、黄酮类化合物实现简称命名
导语 当化学家对着屏幕输入"2-amino-1,9-dihydro-6H-purin-6-one"时,隔壁生物学家可能正在搜索"鸟嘌呤";这种命名差异如同"火星文"与"地球语"的碰撞。现在,鹰谷InDraw 6.2.3版带着53种多环化合物的…...
Linux中的TCP编程接口基本使用
TCP编程接口基本使用 本篇介绍 在UDP编程接口基本使用已经介绍过UDP编程相关的接口,本篇开始介绍TCP编程相关的接口。有了UDP编程的基础,理解TCP相关的接口会更加容易,下面将按照两个方向使用TCP编程接口: 基本使用TCP编程接口…...
系统部署【信创名录】及其查询地址
一、信创类型 (一)服务器: 1.华为云 2.腾讯云 3.阿里云 (二)中央处理器(CPU): 1.海思,鲲鹏920服务器 (三)中间件 1.人大金仓 ࿰…...
JavaWeb后端基础(7)AOP
AOP是Spring框架的核心之一,那什么是AOP?AOP:Aspect Oriented Programming(面向切面编程、面向方面编程),其实说白了,面向切面编程就是面向特定方法编程。AOP是一种思想,而在Spring框…...
Python 中多种方式获取屏幕的 DPI值
在 Python 中,可以通过多种方式获取屏幕的 DPI(每英寸点数)。以下是几种常见的方法: 方法 1:使用 tkinter 模块 tkinter 是 Python 的标准 GUI 库,可以通过它获取屏幕的 DPI。 import tkinter as tkdef …...
高效数据分析实战指南:Python零基础入门
高效数据分析实战指南 —— 以Python为基石,构建您的数据分析核心竞争力 大家好,我是kakaZhui,从事数据、人工智能算法多年,精通Python数据分析、挖掘以及各种深度学习算法。一直以来,我都发现身边有很多在传统行业从…...
Unity DOTS从入门到精通之EntityCommandBufferSystem
文章目录 前言安装 DOTS 包ECBECB可以执行的指令示例: 前言 DOTS(面向数据的技术堆栈)是一套由 Unity 提供支持的技术,用于提供高性能游戏开发解决方案,特别适合需要处理大量数据的游戏,例如大型开放世界游…...
开放充电点协议(OCPP)技术解析:架构演进与通信机制 - 慧知开源充电桩平台
开放充电点协议(OCPP)技术解析:架构演进与通信机制 引言 开放充电点协议(Open Charge Point Protocol, OCPP)作为电动汽车充电基础设施的核心通信标准,其技术架构与实现逻辑直接影响充电桩与中央管理系统&…...
MySQL 索引的数据结构(详细说明)
6. MySQL 索引的数据结构(详细说明) 文章目录 6. MySQL 索引的数据结构(详细说明)1. 为什么使用索引2. 索引及其优缺点2.1 索引概述 3. InnoDB中索引的推演3.1 索引之前的查找3.2 设计索引3.3 常见索引概念1. 聚簇索引2. 二级索引(辅助索引、非聚簇索引)…...
初学者快速入门Python爬虫 (无废话版)
全篇大概 5000 字(含代码),建议阅读时间 40min 一、Python爬虫简介 1.1 什么是网络爬虫? 定义: 网络爬虫(Web Crawler)是自动浏览互联网并采集数据的程序,就像电子蜘蛛在网页间"爬行"。 分类&…...
【git】ssh配置提交 gitcode-ssh提交
【git】ssh配置提交 gitcode-ssh提交 之前一直用的是gitee和阿里云的仓库,前两天想在gitcode上面备份一下我的打洞代码和一些资料 就直接使用http克隆了下来 。 在提交的时候他一直会让我输入账号和密码,但是我之前根本没有设置过这个,根本没…...
【二】JavaScript能力提升---this对象
目录 this的理解 this的原理 事件绑定中的this 行内绑定 动态绑定 window定时器中的this 相信小伙伴们看完这篇文章,对于this的对象可以有一个很大的提升! this的理解 对于this指针,可以先记住以下两点: this永远指向一个…...
C++————类和对象(一)
1.类定义格式 在C中,类(class)是封装数据和操作这些数据的函数的构造。类的定义包含成员变量和成员函数。 类的基本定义格式如下: class ClassName {// 访问修饰符public:// 公有成员DataType memberVariable; // 成员变量voi…...
SpringBoot参数校验:@Valid 与 @Validated 详解
SpringBoot参数校验:Valid 与 Validated 详解 一、案例(参数校验的必要性) 传统方式(无注解)的缺点: // 需要手动校验每个字段,代码冗余且易出错 public String register(User user) {// 手动…...
<论文>MiniCPM:利用可扩展训练策略揭示小型语言模型的潜力
一、摘要 本文跟大家一起阅读的是清华大学的论文《MiniCPM: Unveiling the Potential of Small Language Models with Scalable Training Strategies》 摘要: 对具有高达万亿参数的大型语言模型(LLMs)的兴趣日益增长,但同时也引发…...
SpringCloud系列教程(十三):Sentinel流量控制
SpringCloud中的注册、发现、网关、服务调用都已经完成了,现在就剩下最后一部分,就是关于网络控制。SpringCloud Alibaba这一套中间件做的非常好,把平时常用的功能都集成进来了,而且非常简单高效。我们下一步就完成最后一块拼图Se…...
Codeforces Round 502 E. The Supersonic Rocket 凸包、kmp
题目链接 题目大意 平面上给定两个点集,判定两个点集分别形成的凸多边形能否通过旋转、平移重合。 点集大小 ≤ \leq ≤ 1 0 5 10^{5} 105,坐标范围 [0, 1 0 8 10^{8} 108 ]. 思路 题意很明显,先求出凸包再判断两凸包是否同构。这里用…...
论文阅读方法
文章目录 步骤一:对论文进行自我判断阅读题目和关键词。阅读摘要阅读总结要点 步骤二:阅读文章阅读图表和图表的注释阅读引言阅读实验部分阅读结果和作者对结果的讨论(创新点)要点 步骤三:精度论文回答问题1回答问题2回…...
ArcGIS操作:15 计算点的经纬度,并添加到属性表
注意:需要转化为地理坐标系 1、打开属性表,添加字段 2、计算字段(以计算纬度为例 !Shape!.centroid.Y ) 3、效果...
蓝桥杯历年真题题解
1.轨道炮(数学模拟) #include <iostream> #include <map> using namespace std; const int N1010; int x[N],y[N],v[N]; char d[N]; int main() {int n;int ans-100;cin>>n;for(int i1;i<n;i)cin>>x[i]>>y[i]>>v…...
IP-地址
主机号(Host ID) IP地址简介:IP地址是每台接入互联网的设备所拥有的唯一标识符,类似于电话号码的分层结构,由网络号和主机号组成。为了便于记忆,32位二进制的IP地址通常以点分十进制表示。 网络号…...
MoonSharp 文档一
目录 1.Getting Started 步骤1:在 IDE 中引入 MoonSharp 步骤2:引入命名空间 步骤3:调用脚本 步骤4:运行代码 2.Keeping a Script around 步骤1:复现前教程所有操作 步骤2:改为创建Script对象 步骤…...
2025-03-08 学习记录--C/C++-PTA 习题10-1 判断满足条件的三位数
合抱之木,生于毫末;九层之台,起于累土;千里之行,始于足下。💪🏻 一、题目描述 ⭐️ 裁判测试程序样例: #include <stdio.h> #include <math.h>int search( int n );int…...
三星首款三折叠手机被曝外屏6.49英寸:折叠屏领域的新突破
在智能手机的发展历程中,折叠屏手机的出现无疑是一次具有里程碑意义的创新。它打破了传统手机屏幕尺寸的限制,为用户带来了更加多元和便捷的使用体验。而三星,作为手机行业的巨头,一直以来都在折叠屏技术领域积极探索和创新。近日,三星首款三折叠手机的诸多细节被曝光,其…...
大白话Vue Router 中路由守卫(全局守卫、路由独享守卫、组件内守卫)的种类及应用场景
大白话Vue Router 中路由守卫(全局守卫、路由独享守卫、组件内守卫)的种类及应用场景 答题思路 明确要介绍的内容:需要分别介绍 Vue Router 中全局守卫、路由独享守卫和组件内守卫这三种路由守卫的种类,详细说明它们的定义、使用…...
CUDA编程之OpenCV与CUDA结合使用
OpenCV与CUDA的结合使用可显著提升图像处理性能。 一、版本匹配与环境配置 CUDA与OpenCV版本兼容性 OpenCV各版本对CUDA的支持存在差异,例如OpenCV 4.5.4需搭配CUDA 10.02,而较新的OpenCV 4.8.0需使用更高版本CUDA。 需注意部分模块(…...
Educational Codeforces Round 7 F. The Sum of the k-th Powers 多项式、拉格朗日插值
题目链接 题目大意 求 ( ∑ i 1 n i k ) (\sum_{i1}^{n} i^k) (∑i1nik) m o d ( 1 0 9 7 ) mod(10^97) mod(1097) . 数据范围 : 1 ≤ n ≤ 1 0 9 1 \leq n \leq 10^9 1≤n≤109 , 0 ≤ k ≤ 1 0 6 0 \leq k \leq 10^6 0≤k≤106 . 思路 令 f ( n ) ∑ …...
