C++入门项目:Linux下C++轻量级Web服务器 跑通|运行|测试(小白进)

news2024/9/20 18:36:46

TinyWebServer是一个开源的项目,适合小白入门C++网络编程,注意该项目是在linux系统下。

Linux下C++轻量级Web服务器,助力初学者快速实践网络编程,搭建属于自己的服务器.

  • 使用 线程池 + 非阻塞socket + epoll(ET和LT均实现) + 事件处理(Reactor和Proactor均实现) 的并发模型
  • 使用状态机解析HTTP请求报文,支持解析GET和POST请求
  • 访问服务器数据库实现web端用户注册、登录功能,可以请求服务器图片和视频文件
  • 实现同步/异步日志系统,记录服务器运行状态
  • 经Webbench压力测试可以实现上万的并发连接数据交换

 本文参照README(TinyWebServer::fire: Linux下C++轻量级WebServer服务器 - GitCode)、网上博文(c++ 经典服务器开源项目 Tinywebserver的使用与配置(百度智能云服务器安装ubuntu18.04可用公网ip访问)-CSDN博客,WebServer 跑通/运行/测试(详解版)_webserver测试-CSDN博客),结合自己的实现过程,进行详细的梳理,适合小白看。

1、 配置环境

检查是否有git,还有g++编译器 

 git --version

 g++ --version

 2、克隆源码

 先给出clone命令,下面讲怎么clone

sudo git clone https://gitcode.com/gh_mirrors/ti/TinyWebServer.git 

 ​​ 在克隆的时候输入要clone项目的连接,连接在官网上找 我用的是镜像地址

下面的地址是GitHub官网

链接:GitHub - qinguoyi/TinyWebServer: :fire: Linux下C++轻量级WebServer服务器 

进入项目主页,点击clone -> 复制链接 ->粘贴到控制终端

github上也是一样的 

安装MYSQL,安装好还需要设置MYSQL密码 我的电脑里原本就有mysql  所以就没有这一步

sudo apt-get mysql-server

 进去mysql  

sudo mysql  -uroot -p

 创建一个hx数据库 -> 选择创建的数据库hx -> 创建表user -> 添加用户名字和密码等数据

 项目作者给了MYSQL的语句,可以在README看 

// 建立yourdb库
create database yourdb;

// 创建user表
USE yourdb;
CREATE TABLE user(
    username char(50) NULL,
    passwd char(50) NULL
)ENGINE=InnoDB;

// 添加数据
INSERT INTO user(username, passwd) VALUES('name', 'passwd');

 创建完毕,可以查看你建的数据库

show tables; 

select *from user;

3、编译tinywebserver

首先需要确认main.cpp里的数据库和你mysql数据库配置相同。
查看数据库名称和密码

    cd /etc/mysql
    sudo vim debian.cnf

 输入以上命令,就会出现一下页面

找到clone 下来的TinyWebServer项目 找到main.cpp文件(一般都在主目录下面),然后打开,可以在控制台打开,也可以以文件的方式打开

 注意 如果clone的项目文件被锁了 不能进行写操作,这时候需要解锁,使用一下命令

sudo chmod -R 777 TinyWebServer

 改了权限之后才能对main.cpp文件进行写操作

然后修改main.cpp文件脚本,使用文本编辑器打开main.cpp 方便修改

 最后对应之前数据库的用户名和密码 修改main.cpp中的 数据库信息

 修改后 2,编译Tinywebserver(编译运行)

cd Tinywebserver
sh ./build.sh

如果出现以上问题;就需要安装libmysqlclient-dev 

 pt-get install libmysqlclient-dev

如果安装上面的链接库也出现了问题(没有出问题 就直接跳过这里)

就需要安装libssl-dev

  pt-get install libssl-dev

 如果还是报错 报错依赖问题 像像下面这种

 解决方法就是:使用aptitude软件包管理来安装:

然后再安装 libmysqlclient-dev 

 

安装成功后 输入sh ./build.sh

此时他会创建server文件

最后在命令行输入 ./server

 ./server

 没有退出 就是保持链接的 

 4、浏览器查看效果

在浏览器搜索框 输入ip:9006就可以进行登录注册操作了(输入localhost:9006)

 

 

 

 以上就是跑通整个项目的流程 

下面将会详解 整个项目的代码、实现原理

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

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

相关文章

时钟分频流程

具体流程: 外部晶振(XTIpll)和 外部时钟(EXTCLK)经过OM【3:2】选择进入时钟模块 我们可以看到,在不同的模式下会选择不同的时钟源和状态。 时钟信号进入锁相环(PLL)后,会改…

Java项目:139 springboot基于SpringBoot的论坛系统设计与实现

项目介绍 论坛系统设置的角色有管理员,版主,用户等。 管理员管理论坛,主要是对论坛帖子增删改查以及对论坛帖子回复进行查看,对版主和用户进行管理,管理新闻等。 版主可以发布帖子,可以查询论坛帖子&…

Stage 模型应用程序包的结构

AppScope 目录是工具自动生成的 Module 则是工具自动生成的 entry、library,也可以自定义。 Module 类型 Module 有两种类型: Ability 类型的 Module:用来实现应用功能和特性,每一个 Ability 类型的 Module 编译以后。生成一个…

【C++ Primer Plus习题】11.5

问题: 解答: main.cpp #include <iostream> #include "Stonewt.h" using namespace std;int main() {Stonewt incognito 275;cout << "incognito: " << incognito << endl;Stonewt wolfe(285.7);cout << "wolfe: &qu…

Spring Boot技术在医疗排班系统开发中的创新

4系统概要设计 4.1概述 本系统采用B/S结构(Browser/Server,浏览器/服务器结构)和基于Web服务两种模式&#xff0c;是一个适用于Internet环境下的模型结构。只要用户能连上Internet,便可以在任何时间、任何地点使用。系统工作原理图如图4-1所示&#xff1a; 在这里插入图片描述 …

Web入门-08.Tomcat-基本使用

一.Tomcat的基本使用 二.Tomcat使用时的常见问题 Tomcat默认占用8080端口 如果占用8080端口的进程不方便被关闭掉&#xff0c;那么便配置Tomcat端口号(conf/server.xml) 三.Tomcat部署项目

机器学习之 PCA降维

1.PCA 降维简介 主成分分析&#xff08;Principal Component Analysis, PCA&#xff09;是一种统计方法&#xff0c;用于在数据集中寻找一组线性组合的特征&#xff0c;这些特征被称为主成分。PCA 的目标是通过变换原始特征空间到新的特征空间&#xff0c;从而减少数据的维度&…

AGV行业遇冷,叉车AGV逆风崛起:180家企业掀起血战

导语 大家好&#xff0c;我是社长&#xff0c;老K。专注分享智能制造和智能仓储物流等内容。 在自动化物流领域&#xff0c;一场悄然发生的变革正引领着行业风向的转折。尽管2024年以来&#xff0c;整体AGV&#xff08;自动引导车&#xff09;行业因下游市场需求疲软而遭遇增速…

打造安心宠物乐园:EasyCVR平台赋能猫咖/宠物店的智能视频监控解决方案

随着宠物经济的蓬勃发展&#xff0c;宠物店与猫咖等场所对顾客体验、宠物安全及健康管理的需求日益提升。然而&#xff0c;如何确保这些场所的安全与秩序&#xff0c;同时提升顾客体验&#xff0c;成为了经营者们关注的焦点。引入高效、智能的视频监控方案&#xff0c;不仅能够…

uniapp交互反馈

页面交互反馈可以通过:uni.showToast(object)实现,常用属性有 ioc值说明 值说明success显示成功图标&#xff0c;此时 title 文本在小程序平台最多显示 7 个汉字长度&#xff0c;App仅支持单行显示。error显示错误图标&#xff0c;此时 title 文本在小程序平台最多显示 7 个汉字…

【Linux】多线程:POSIX库、线程管理、线程ID

目录 一、POSIX线程库 二、线程ID 三、动态库加载 四、再谈线程ID 一、POSIX线程库 原生库&#xff1a;指的是操作系统自带的库&#xff0c;如POSIX线程库&#xff0c;在类Unix系统中通常是原生支持的。这些库是操作系统的一部分&#xff0c;提供了系统级的线程管理功能。 …

基于人工智能的植物病害检测系统

目录 引言项目背景环境准备 硬件要求软件安装与配置系统设计 系统架构关键技术代码示例 数据预处理模型训练模型预测应用场景结论 1. 引言 植物病害的早期检测对于农业生产至关重要&#xff0c;它有助于及时采取措施防止病害扩散&#xff0c;减少作物损失。通过人工智能技术…

css问题:display:flex布局+justify-content: space-between; 最后一行不能左对齐

解决方法1&#xff1a; display: flex;margin: 10px var(--leftRight); --leftRight&#xff1a; 动态计算一行减去item的宽度后剩下的间距 解决方法2&#xff1a;网格布局 display: grid;grid-template-columns: repeat(5, 1fr);margin: 10px auto; 完整代码&#xff1a; &l…

C++ 继承学习笔记

1.继承概念 继承 (inheritance) 机制是面向对象程序设计 使代码可以复用 的最重要的手段&#xff0c;它允许程序员在 保 持原有类特性的基础上进行扩展 &#xff0c;增加功能&#xff0c;这样产生新的类&#xff0c;称派生类。继承 呈现了面向对象 程序设计的层次结构 &#xf…

奥威让您更懂现金流情况

企业现金流一旦出了问题都是大问题&#xff0c;会直接影响到企业的日常运作&#xff0c;甚至直接关系到企业能不能继续存活&#xff0c;因此现金流量表是企业财务分析中重要报表之一&#xff0c;也是企业监控财务监控情况的重要手段之一。那么这么重要的一份现金流量表该怎么做…

科研绘图系列:R语言折线图(linechart plots)

文章目录 介绍加载R包导入数据数据预处理画图组合图形介绍 在R语言中,折线图(Line Plot)是一种常用的数据可视化类型,用于展示数据随时间或有序类别变化的趋势。折线图通过连接数据点来形成一条或多条线,这些线条可以清晰地表示数据的变化方向、速度和模式。 加载R包 k…

基于Spring Boot的宠物领养系统的设计与实现

基于Spring Boot的宠物领养系统的设计与实现 springboot138宠物领养系统的设计与实现 摘 要 如今社会上各行各业&#xff0c;都在用属于自己专用的软件来进行工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。互联网的发展&#xff0c;离不开一…

第 1 章:原生 AJAX

原生AJAX 1. AJAX 简介 AJAX 全称为 Asynchronous JavaScript And XML&#xff0c;就是异步的 JS 和 XML。通过 AJAX 可以在浏览器中向服务器发送异步请求&#xff0c;最大的优势&#xff1a;无刷新获取数据。AJAX 不是新的编程语言&#xff0c;而是一种将现有的标准组合在一…

JavaWeb案例

环境搭建 先创建好数据库&#xff0c;建表并插入数据 create database talis; use talis;-- 部门管理 create table dept(id int unsigned primary key auto_increment comment 主键ID,name varchar(10) not null unique comment 部门名称,create_time datetime not null com…

Springboot整合【Kafka】

1.添加依赖 在pom.xml文件中添加以下依赖&#xff1a; <!-- 进行统一的版本管理--><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.3.3</version>&l…