当前位置: 首页 > news >正文

C++ Webserver从零开始:配置环境(九)——下载github的项目进行测试

前言

大家好,我又来更新Webserver的博客了。上一次更新这个专栏时2024.2.5号,离现在已经13天了。非常抱歉,中间隔了那么久。一方面是基础知识学完之后,就要开始自己写代码了。看基础知识和写代码是两回事,理论和实践的区别还是非常大的。所以我对自己的要求是要完成一部分的内容才能开始着手写博客,避免自己的Webserver还没做出点样子就来误人子弟。虽然不能保证自己的博客质量要达到多么多么高,但至少要对得起自己,不能敷衍自己。这是我对自己的要求。另一方面是不可抗力和自身原因,这个专栏从一月中开始,到现在已经将近40天,这40天的时间仅有一半我是真正地花在学习上地。回老家过年浪费了十天,加上我一周总要偷懒多休息一两天。对此我深感惭愧。寒假马上就要结束,我在24,25号就要开学,所以在这剩下的时间里,我一定全力以赴,完成Webserver剩下的内容。

安装Linux环境

学完基础知识之后,我们就需要开始着手搭建我们自己的Webserver了。由于大部分同学没接触过相关的项目,完全白手起家不太现实,所以找一个现成的WebServer来参考比较合理。

我选择的是Github上的一个项目GitHub - qinguoyi/TinyWebServer: :fire: Linux下C++轻量级WebServer服务器.

拿到项目后我们不着急写,先将作者的项目拿来运行一下,如果能运行成功,说明它的项目没有问题,才能完成后续的工作。不然等千辛万苦写完了代码编译一直报错,那真是想死的心都有了。

首先打开上面的项目,找到README中的快速运行一节。

可以看到,作者采用的是Ubuntu版本 + MySQL的运行环境。

由于我采用的是阿里云的Linux,所以不用自己下载Ubuntu,所以这部分内容就不予展示了。读者如果没有云,也可以自己在电脑上下载一个 VmwareWorkstation虚拟机,然后在虚拟机中安装Ubuntu的镜像,效果应该是差不多的,这部分网上教程很多,就不再赘述。

没有虚拟机的同学可以装好虚拟机再继续往下阅读,当然如果你嫌麻烦,也可以花一笔钱去阿里云或者腾讯云买一个云服务器,他们一般会对学生有优惠活动。而且因为我们对云服务器的使用仅限于学习,所以可以购买配置最低的一档,比如我买了一个2核,2G,2M带宽,40G内存的腾讯云服务器,费用是96元一年,仅供参考,当然,如果你是富哥不差钱,买一个稍微配置高一点的也可以。


安装MySQL

到这一步相信你已经安装了Ubuntu环境,下面开始安装Mysql。我的Ubuntu是20.04版本,Mysql也安装的8.0版本。实测运行该项目无问题,只是需要修改一些配置。

首先打开终端,进入root用户,Linux用户命令可以查看我这篇文章

Linux用户常用命令——Linux命令(一)-CSDN博客

在终端运行以下命令下载Mysql,如果你没有apt包管理器则需要先下载,一般云服务器都有apt包管理器,部分虚拟机映像需要自行下载。

使用 apt 包管理器:

sudo apt-get update
sudo apt-get install mysql-server

这里回车

执行以下命令进入mysql,Mysql的root用户默认密码和Linux密码相同

mysql -u root -p

查看mysql版本(mysql命令以分号结尾)

SELECT VERSION();

输入exit回车 退出mysql


将github项目git到本地

首先检查是否安装了git

如果没有安装git,先用apt安装git工具。

然后去github上把项目下载到本地

首先找到项目,复制项目URL

进入终端,创建一个目录WebTest,进入目录,git到本地

mkdir WebTest
cd WebTest
git clone <URL>

ls查看

创建完成,接下来我把这个目录移动到我的另一个用户ubuntu下,这一步不是必须,我只是方便管理,读者可以自行选择是否移动

给其WebTest用户修改权限

到这一步,我们的项目就已经成功clone到本地了,接下来我们要去把它运行起来。

运行项目

先回到GitHub上,查看快速运行部分

回到终端,进入mysql,依次执行以上命令。这里我将

database命名为testDB

name命名为testName

passwd设置为123

再将main.cpp中的登录名,密码,库名修改成我们登录mysql的账户密码(注意,不是刚刚我们在sql里创建的,而是登录mysql账户用的,Mysql默认root密码是Linux用户密码)的。

这里你用vim或者vscode远程都可以,我这里就用vscode了。如果你还没配置vscode远程连接,就直接在终端用 'vim main.cpp'命令打开main文件,将光标移动到对应位置后按i键进行修改,修改完成后按ESC,再使用 ':wq' 保存退出即可

随后我们执行

sh ./build.sh

果然出现了BUG

这里是缺少mysql库文件,我们去查一下GitHub上的issue,发现作者给了解决方法

执行代码

sudo apt-get install libmysqlclient-dev

再make一遍,果然不再报库文件缺失,至于warning不用管。

这时候ls一下,可以看到server可运行文件了

试一试

./server

光标不动了,说明运行成功。

浏览器访问

接下来就是浏览器访问了,在保持服务器运行的情况下,打开浏览器

如果是虚拟机的同学,可以使用回环地址(不知道的翻一下计网的书)

127.0.0.1:9006

云服务器的同学,可以去管理台查一下自己的云服务器的公网IP,然后输入

IP:9006

如果发现打不开,就去服务器实例的防火墙(腾讯云)/安全组(阿里云)里面把9006端口设置为允许

纸上得来终觉浅,接下来我们就要正式写代码了

相关文章:

C++ Webserver从零开始:配置环境(九)——下载github的项目进行测试

前言 大家好&#xff0c;我又来更新Webserver的博客了。上一次更新这个专栏时2024.2.5号&#xff0c;离现在已经13天了。非常抱歉&#xff0c;中间隔了那么久。一方面是基础知识学完之后&#xff0c;就要开始自己写代码了。看基础知识和写代码是两回事&#xff0c;理论和实践的…...

2024前端面试准备之TypeScript篇(一)

全文链接 1. 什么是TypeScript TypeScript是一种开源的编程语言,是JavaScript的一个超集。它添加了静态类型、类、接口和模块等特性,使得开发者能够更好地组织和维护大型应用程序。TypeScript代码可以被编译成JavaScript,从而可以在任何支持JavaScript的环境中运行。 2. …...

kali无线渗透之蓝牙攻击与原理

原理 蓝牙网络中的“个人身份码”攻击传统的蓝牙设备&#xff0c;主要是指“蓝牙规范2.1版”以前的各版蓝牙设备&#xff0c;以及使用“安全简化配对”(Secure SimplePairing&#xff0c;SSP)协议的蓝牙设备。 这些传统的蓝牙设备仅仅依赖于“个人身份码”( Personalldentifi…...

【开源】基于JAVA+Vue+SpringBoot的就医保险管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 科室档案模块2.2 医生档案模块2.3 预约挂号模块2.4 我的挂号模块 三、系统展示四、核心代码4.1 用户查询全部医生4.2 新增医生4.3 查询科室4.4 新增号源4.5 预约号源 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVue…...

德国vetter krantechnik起重机安装操作和维护说明包含电路图装配图

德国vetter krantechnik起重机安装操作和维护说明包含电路图装配图...

怎样解决恢复VPS数据信息?

对于服务器来说其中的数据信息是十分重要的内容&#xff0c;一旦出现数据丢失或损坏&#xff0c;就会对企业造成巨大的损失&#xff0c;所以备份是非常重要的&#xff0c;那么在使用VPS时我们怎样能够恢复其中的数据信息呢&#xff1f; 一、手动备份 其中比较简单快速的备份方…...

OpenAI最新模型Sora到底有多强?眼见为实的真实世界即将成为过去!

文章目录 1. 写在前面2. 什么是Sora&#xff1f;3. Sora的技术原理 【作者主页】&#xff1a;吴秋霖 【作者介绍】&#xff1a;Python领域优质创作者、阿里云博客专家、华为云享专家。长期致力于Python与爬虫领域研究与开发工作&#xff01; 【作者推荐】&#xff1a;对JS逆向感…...

Qt的基本操作

文章目录 1. Qt Hello World 程序1.1 通过图形化界面的方式1.2 通过代码的方式实现 2. Qt 的编码问题3. 使用输入框实现hello world4. 使用按钮实现hello world5. Qt 编程注意事项6. 查询文档的方式7. 认识Qt坐标系 1. Qt Hello World 程序 1.1 通过图形化界面的方式 我们先讲…...

信号系统之数据压缩

1 数据压缩策略 表 27-1 显示了对数据压缩算法进行分类的两种不同方法。在(a)中&#xff0c;这些方法被归类为无损或有损(lossless or loss)。无损技术意味着恢复的数据文件与原始文件相同。这对于许多类型的数据是绝对必要的&#xff0c;例如&#xff1a;可执行代码、文字处理…...

第二篇【传奇开心果微博系列】Python微项目技术点案例示例:成语接龙游戏

传奇开心果微博系列 系列微博目录Python微项目技术点案例示例系列 微博目录一、微项目目标二、雏形示例代码三、扩展整体思路四、玩家输入示例代码五、成语判断示例代码六、回答判断示例代码七、电脑判断示例代码八、游戏结束示例代码九、界面优化示例代码十、扩展成语库示例代…...

国内AI大模型主要有哪些

ChatGPT火爆后不到一个月的时间&#xff0c;阿里、华为、腾讯、京东、字节、360、商汤、科大讯飞等大厂纷纷下场&#xff0c;或官宣入场或亮相大模型。我国对生成式AI实行监管的正式法规主要是2023年8月正式施行的《生成式人工智能服务管理暂行办法》。 据不完全统计&#xff…...

RabbitMQ保证消息的可靠性

1. 问题引入 消息从发送&#xff0c;到消费者接收&#xff0c;会经理多个过程&#xff1a; 其中的每一步都可能导致消息丢失&#xff0c;常见的丢失原因包括&#xff1a; 发送时丢失&#xff1a; 生产者发送的消息未送达exchange消息到达exchange后未到达queue MQ宕机&…...

【工作实践-02】实验室移动端—跳转页面及交互

一、跳转页面不关闭当前页&#xff0c;与uniapp头部导航栏的返回按钮效果相似 uni.navigateBack({delta: 1}) 二、返回页面并刷新 1. 返回上一页时重新获取列表(调用上一页面获取列表方法) let pages getCurrentPages(); // 当前页面let beforePage pages[pages.length - 2…...

HTTP 请求 400错误

问题 HTTP 请求 400错误 详细问题 客户端发送请求 public static UserInfo updateUserInfo(UserInfo userInfo) {// 创建 OkHttpClient 对象OkHttpClient client new OkHttpClient();// 创建请求体MediaType JSON MediaType.parse("application/json; charsetutf-8&…...

C语言---指针进阶

1.字符指针 int main() {char str1[] "hello world";char str2[] "hello world";const char* str3 "hello world.";const char* str4 "hello world.";if (str3 str4){//常量字符串在内存里面是无法修改的&#xff0c;所以没必要…...

QT-通信编码格式问题

这里写目录标题 一、项目场景1.QT客户端与服务端通信时&#xff0c;转化步骤如下&#xff1a;2.原数据示例3.转化后数据 二、问题描述1.采用Soap协议2.采用HTTP协议 三、原因分析四、解决方案 一、项目场景 1.QT客户端与服务端通信时&#xff0c;转化步骤如下&#xff1a; 1&…...

一文了解Web3.0真实社交先驱ERA

Web2时代&#xff0c;少数科技巨头垄断了全球近60亿人口的网络社交数据&#xff0c;并用之为自己牟利&#xff0c;用户无法掌控个人数据&#xff0c;打破该局面逐渐成为共识&#xff0c;于是&#xff0c;不少人看到了Web3社交赛道蕴含的巨大机遇&#xff0c;标榜着去中心化和抗…...

微前端(qiankun)vue3+vite

目录 一、什么是微前端 二、主应用接入 qiankun 1.按照qiankun插件 2.注册微应用引用 3.挂载容器 三、微应用接入 qiankun 1.vite.config.ts 2.main.ts ps&#xff1a;手动加载微应用方式 ps&#xff1a;为什么不用 iframe 一、什么是微前端 微前端是一种多个团队通过独…...

根据Ruoyi做二开

Ruoyi二开 前言菜单代码生成新建微服务网关添加微服务的路由 vue页面和对应的js文件js中方法的url和controller中方法的url总结 前言 之前写过一篇文章&#xff0c;若依微服务版本搭建&#xff0c;超详细&#xff0c;就介绍了怎么搭建若依微服务版本&#xff0c;我们使用若依就…...

DockerFile的应用

DockerFile的应用 一、介绍1 构建的三步骤2 构建的过程 二、常用命令三、DockerFile案例1 创建DockerFile文件2 使用DockerFile文件构建镜像3 启动容器并验证 四 DockerFile添加数据卷 一、介绍 DockerFile是用来构建Docker镜像的构建文件&#xff0c;是由一系列命令和参数构成…...

Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动

一、前言说明 在2011版本的gb28181协议中&#xff0c;拉取视频流只要求udp方式&#xff0c;从2016开始要求新增支持tcp被动和tcp主动两种方式&#xff0c;udp理论上会丢包的&#xff0c;所以实际使用过程可能会出现画面花屏的情况&#xff0c;而tcp肯定不丢包&#xff0c;起码…...

day52 ResNet18 CBAM

在深度学习的旅程中&#xff0c;我们不断探索如何提升模型的性能。今天&#xff0c;我将分享我在 ResNet18 模型中插入 CBAM&#xff08;Convolutional Block Attention Module&#xff09;模块&#xff0c;并采用分阶段微调策略的实践过程。通过这个过程&#xff0c;我不仅提升…...

c++ 面试题(1)-----深度优先搜索(DFS)实现

操作系统&#xff1a;ubuntu22.04 IDE:Visual Studio Code 编程语言&#xff1a;C11 题目描述 地上有一个 m 行 n 列的方格&#xff0c;从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子&#xff0c;但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...

佰力博科技与您探讨热释电测量的几种方法

热释电的测量主要涉及热释电系数的测定&#xff0c;这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中&#xff0c;积分电荷法最为常用&#xff0c;其原理是通过测量在电容器上积累的热释电电荷&#xff0c;从而确定热释电系数…...

基于 TAPD 进行项目管理

起因 自己写了个小工具&#xff0c;仓库用的Github。之前在用markdown进行需求管理&#xff0c;现在随着功能的增加&#xff0c;感觉有点难以管理了&#xff0c;所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD&#xff0c;需要提供一个企业名新建一个项目&#…...

【学习笔记】erase 删除顺序迭代器后迭代器失效的解决方案

目录 使用 erase 返回值继续迭代使用索引进行遍历 我们知道类似 vector 的顺序迭代器被删除后&#xff0c;迭代器会失效&#xff0c;因为顺序迭代器在内存中是连续存储的&#xff0c;元素删除后&#xff0c;后续元素会前移。 但一些场景中&#xff0c;我们又需要在执行删除操作…...

Proxmox Mail Gateway安装指南:从零开始配置高效邮件过滤系统

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐&#xff1a;「storms…...

用鸿蒙HarmonyOS5实现中国象棋小游戏的过程

下面是一个基于鸿蒙OS (HarmonyOS) 的中国象棋小游戏的实现代码。这个实现使用Java语言和鸿蒙的Ability框架。 1. 项目结构 /src/main/java/com/example/chinesechess/├── MainAbilitySlice.java // 主界面逻辑├── ChessView.java // 游戏视图和逻辑├──…...

针对药品仓库的效期管理问题,如何利用WMS系统“破局”

案例&#xff1a; 某医药分销企业&#xff0c;主要经营各类药品的批发与零售。由于药品的特殊性&#xff0c;效期管理至关重要&#xff0c;但该企业一直面临效期问题的困扰。在未使用WMS系统之前&#xff0c;其药品入库、存储、出库等环节的效期管理主要依赖人工记录与检查。库…...

JS红宝书笔记 - 3.3 变量

要定义变量&#xff0c;可以使用var操作符&#xff0c;后跟变量名 ES实现变量初始化&#xff0c;因此可以同时定义变量并设置它的值 使用var操作符定义的变量会成为包含它的函数的局部变量。 在函数内定义变量时省略var操作符&#xff0c;可以创建一个全局变量 如果需要定义…...