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端口设置为允许

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

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Git常用命令整理

在介绍安装和简单使用前&#xff0c;先看一下百度百科中的简介吧&#xff1a; ———————————————————————————————————————— Git --- The stupid content tracker, 傻瓜内容跟踪器。 Linux 是这样给我们介绍 Git 的&#xff1a; Git 是用…

Kafka进阶

文章目录 概要应用场景消息队列两种模式kafka的基础架构分区常见问题小结 概要 kafka的传统定义&#xff1a;kafka是一个分布式的基于发布\订阅模式的消息队列&#xff0c;主要用于大数据实时处理领域。 kafka的最新概念&#xff1a;kafka是一个开源的分布式事件流平台&#x…

UIKit 在 UICollectionView 中拖放交换 Cell 视图的极简实现

概览 UIKit 中的 UICollectionView 视图是我们显示多列集合数据的不二选择&#xff0c;而丰富多彩的交互操作更是我们选择 UICollectionView 视图的另一个重要原因。 如上图所示&#xff1a;我们实现了在 UICollectionView 中拖放交换任意两个 Cell 子视图的功能&#xff0c;这…

不要抱怨,不如抱 Java 运算符吧 (1)

本篇会加入个人的所谓‘鱼式疯言’ ❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言 而是理解过并总结出来通俗易懂的大白话, 小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的. &#x1f92d;&#x1f92d;&#x1f92d;可能说的不是那么严谨.但小编初心是能让更多人…

学习鸿蒙基础(5)

一、honmonyos的page路由界面的路径 新建了一个page,然后删除了。运行模拟器的时候报错了。提示找不到这个界面。原来是在路由界面没有删除这个page。新手刚接触找了半天才找到这个路由。在resources/base/profile/main_pages.json 这个和微信小程序好类似呀。 吐槽&#xf…

普中51单片机学习(串口通信)

串口通信 原理 计算机通信是将计算机技术和通信技术的相结合&#xff0c;完成计算机与外部设备或计算机与计算机之间的信息交换 。可以分为两大类&#xff1a;并行通信与串行通信。并行通信通常是将数据字节的各位用多条数据线同时进行传送 。控制简单、传输速度快&#xff1…

百度智能云分布式数据库 GaiaDB-X 与龙芯平台完成兼容认证

近日&#xff0c;百度智能云的分布式关系型数据库软件 V3.0 与龙芯中科技术股份有限公司的龙芯 3C5000L/3C5000 处理器平台完成兼容性测试&#xff0c;功能与稳定性良好&#xff0c;获得了龙架构兼容互认证证书。 龙芯系列处理器 通用 CPU 处理器是信息产业的基础部件&#xf…

LINUX读取RTC实时时钟时间

linux 读写RTC时间_linux rtc 读写-CSDN博客

《游戏引擎架构》--学习3

内存管理 优化动态内存分配 维持最低限度的堆分配&#xff0c;并且永不在紧凑循环中使用堆分配 容器 迭代器 Unicode

LeetCode 0590. N 叉树的后序遍历:深度优先搜索(DFS)

【LetMeFly】590.N 叉树的后序遍历&#xff1a;深度优先搜索(DFS) 力扣题目链接&#xff1a;https://leetcode.cn/problems/n-ary-tree-postorder-traversal/ 给定一个 n 叉树的根节点 root &#xff0c;返回 其节点值的 后序遍历 。 n 叉树 在输入中按层序遍历进行序列化表…

【Linux】自主WEB服务器实现

自主web服务器实现 1️⃣构建TcpServer2️⃣构建HttpServer3️⃣构建HttpRequest和HttpResponseHttp请求报文格式Http相应报文读取、处理请求&构建响应读取请求中的一行读取请求中需要注意的点 4️⃣CGI模式判断是否需要用CGI处理请求构建任务&线程池管理 5️⃣实验结果…

解决pycharm中PIL安装失败

问题&#xff1a;在调用pil时显示pil标红 我在设置中下载每次失败&#xff0c;显示 ERROR: Could not find a version that satisfies the requirement PIL (from versions: none) ERROR: No matching distribution found for PIL我尝试了很久&#xff0c;查看了一些博客 &a…

odoo16-API(Controller)带有验证访问的接口

odoo16-API&#xff08;Controller&#xff09;带有验证访问的接口 目前我使用odoo原生的登录token来验证登陆的有效性 废话不多说直接上代码 # 测试获取session_id import requests class GetOdooData(http.Controller):def getOdooToken(self):# http://localhost:8123访问…

OpenAI 的 GPTs 提示词泄露攻击与防护实战:防御卷(一)

前面的OpenAI DevDay活动上&#xff0c;GPTs技术的亮相引起了广泛关注。随着GPTs的创建权限开放给Plus用户&#xff0c;社区里迅速涌现了各种有趣的GPT应用&#xff0c;这些都是利用了Prompt提示词的灵活性。这不仅展示了技术的创新潜力&#xff0c;也让人们开始思考如何获取他…

AI新工具(20240222)SDXL-Lightning-节跳动开发一个快速的文本到图像生成模型;GoEnhance - 视频风格转换等

SDXL-Lightning - 节跳动开发一个快速的文本到图像生成模型 SDXL-Lightning是字节跳动开发一个快速的文本到图像生成模型&#xff0c;能够在几个步骤内生成高质量的1024像素图像。该模型发布用于研究目的&#xff0c;可以从stabilityai/stable-diffusion-xl-base-1.0中提取模型…

nginx之web性能location优先级

4.2 event事件 events {worker_connections 65536; #设置单个工作进程的最大并发连接数use epoll;#使用epoll事件驱动&#xff0c;Nginx支持众多的事件驱动&#xff0c;比如:select、poll、epoll&#xff0c;只能设置在events模块中设置。accept_mutex on; #on为同一时刻一个…

【OpenFeign常用配置】

OpenFeign常用配置 快速入门&#xff1a;1、引入依赖2、启用OpenFeign 实践1、引入依赖2、开启连接池功能3、模块划分4、日志5、重试 快速入门&#xff1a; OpenFeign是一个声明式的http客户端&#xff0c;是spring cloud在eureka公司开源的feign基础上改造而来。其作用及时基于…

医药之链:基于Django的智能药品管理系统

框架 Python 3.7 django 3.2.13 Bootstrap&#xff08;前端&#xff09; sqlite&#xff08;数据库&#xff09;导包 pip install django3.2.13 pip install pandas pip install xlwt环境搭建 登录 zfx 123456

Vue样式绑定

1. 绑定 HTML class ①通过class名称的bool值判断样式是否被启用 <template><!--通过样式名称是否显示控制样式--><div :class"{ haveBorder: p.isBorder, haveBackground-color: p.isBackgroundcolor }">此处是样式展示区域</div><br /…

Kotlin学习 6

1.接口 interface Movable {var maxSpeed: Intvar wheels: Intfun move(movable: Movable): String}class Car(var name: String, override var wheels: Int 4, _maxSpeed: Int) : Movable {override var maxSpeed: Int _maxSpeedget() fieldset(value) {field value}overr…