【git】【网络】【项目配置运行】HTTP 协议的微型简易 Web 服务器---tinyEasyMuduoWebServer

news2025/4/21 11:03:22

【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_netMuduo 网络库(TCP 服务器、客户端)
-lmuduo_baseMuduo 基础库(日志、线程池、定时器)
-lpthreadPOSIX 线程库(多线程支持)
-ljsoncppJSON 解析库(JSON 读写)
-lmysqlclientMySQL 客户端库(连接数据库)

3.运行结果

在这里插入图片描述
同一台Ubuntu访问:
在这里插入图片描述
同一台公网下另一台电脑的windows:
在这里插入图片描述
大概配置运行是这样子的,我们发现他项目里面的两个.pro文件没有用处,界面直接在main里面写的html,可能是用qt打开时有用吧,但是具体我qt删了没法测试。

这个是项目配置 最近大概看看逻辑 后续可能会写一下实现逻辑

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2312670.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

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.人大金仓 &#xff0…

JavaWeb后端基础(7)AOP

AOP是Spring框架的核心之一,那什么是AOP?AOP:Aspect Oriented Programming(面向切面编程、面向方面编程),其实说白了,面向切面编程就是面向特定方法编程。AOP是一种思想,而在Spring框…

Unity DOTS从入门到精通之EntityCommandBufferSystem

文章目录 前言安装 DOTS 包ECBECB可以执行的指令示例: 前言 DOTS(面向数据的技术堆栈)是一套由 Unity 提供支持的技术,用于提供高性能游戏开发解决方案,特别适合需要处理大量数据的游戏,例如大型开放世界游…

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永远指向一个…

<论文>MiniCPM:利用可扩展训练策略揭示小型语言模型的潜力

一、摘要 本文跟大家一起阅读的是清华大学的论文《MiniCPM: Unveiling the Potential of Small Language Models with Scalable Training Strategies》 摘要: 对具有高达万亿参数的大型语言模型(LLMs)的兴趣日益增长,但同时也引发…

SpringCloud系列教程(十三):Sentinel流量控制

SpringCloud中的注册、发现、网关、服务调用都已经完成了,现在就剩下最后一部分,就是关于网络控制。SpringCloud Alibaba这一套中间件做的非常好,把平时常用的功能都集成进来了,而且非常简单高效。我们下一步就完成最后一块拼图Se…

ArcGIS操作:15 计算点的经纬度,并添加到属性表

注意:需要转化为地理坐标系 1、打开属性表,添加字段 2、计算字段(以计算纬度为例 !Shape!.centroid.Y ) 3、效果

蓝桥杯历年真题题解

1.轨道炮&#xff08;数学模拟&#xff09; #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-地址

主机号&#xff08;Host ID&#xff09; IP地址简介&#xff1a;IP地址是每台接入互联网的设备所拥有的唯一标识符&#xff0c;类似于电话号码的分层结构&#xff0c;由网络号和主机号组成。为了便于记忆&#xff0c;32位二进制的IP地址通常以点分十进制表示。 网络号&#xf…

2025-03-08 学习记录--C/C++-PTA 习题10-1 判断满足条件的三位数

合抱之木&#xff0c;生于毫末&#xff1b;九层之台&#xff0c;起于累土&#xff1b;千里之行&#xff0c;始于足下。&#x1f4aa;&#x1f3fb; 一、题目描述 ⭐️ 裁判测试程序样例&#xff1a; #include <stdio.h> #include <math.h>int search( int n );int…

三星首款三折叠手机被曝外屏6.49英寸:折叠屏领域的新突破

在智能手机的发展历程中,折叠屏手机的出现无疑是一次具有里程碑意义的创新。它打破了传统手机屏幕尺寸的限制,为用户带来了更加多元和便捷的使用体验。而三星,作为手机行业的巨头,一直以来都在折叠屏技术领域积极探索和创新。近日,三星首款三折叠手机的诸多细节被曝光,其…

LINUX网络基础 [五] - HTTP协议

目录 HTTP协议 预备知识 认识 URL 认识 urlencode 和 urldecode HTTP协议格式 HTTP请求协议格式 HTTP响应协议格式 HTTP的方法 HTTP的状态码 ​编辑HTTP常见Header HTTP实现代码 HttpServer.hpp HttpServer.cpp Socket.hpp log.hpp Makefile Web根目录 H…

WPS Word中英文混杂空格和行间距不一致调整方案

文章目录 问题1&#xff1a;在两端对齐的情况下&#xff0c;如何删除参考文献&#xff08;英文&#xff09;的空格问题2&#xff1a;中英文混杂行间距不一致问题问题3&#xff1a;设置中文为固定字体&#xff0c;设置西文为固定字体参考 问题1&#xff1a;在两端对齐的情况下&a…

CSDN博客:Markdown编辑语法教程总结教程(中)

❤个人主页&#xff1a;折枝寄北的博客 Markdown编辑语法教程总结 前言1. 列表1.1 无序列表1.2 有序列表1.3 待办事项列表1.4 自定义列表 2. 图片2.1 直接插入图片2.2 插入带尺寸的图片2.3 插入宽度确定&#xff0c;高度等比例的图片2.4 插入高度确定宽度等比例的图片2.5 插入居…