✔项目目的
项目实现什么功能项目模块划分 ✔环境搭建
1.cpp-httplib开源库2.升级gcc
1.查看gcc的版本2.更新步骤 3.安装jsoncpp4.安装boost环境ctemplate
安装步骤(只支持centos7 x86_64)小插曲
pip安装步骤 ✔测试httplib-demo
✔项目目的 项目实现什么功能项目模块划分1.浏览器可以访问当前在线oj当中的所有题目,获取题目的列表
2.点开任意一个题目,并且能够作答
3.编译用户提交的代码,并且返回执行结果
支持查看题目列表
支持点击单个题目
支持代码块书写代码
支持提交书写的代码到后端
支持后端编译运行
支持返回结果
项目采用b/s模型,及浏览器+服务端模型
请求数据从浏览器中来
服务端处理完毕后,响应返回给浏览器
所以划分为四个模块,每个模块的大致功能如下
http模块
接收浏览器的请求+发送响应,我使用开源库cpp-httplib的方法
试题模块
管理所有的oj试题,本质上有两种策略来进行管理
1.一种策略是将试题写到文件当中,服务器从文件当中读回来;
2.另一种策略是将试题保存在数据库当中,服务端每次去数据库当中查询编译运行模块
处理浏览器提交的代码,编译+运行
工具模块
提供时间戳, 提供日志, 提供字符串等方法
了解项目的大致功能后,我们开始搭建环境
✔环境搭建 1.cpp-httplib开源库我们需要先找一个开源的httplib库,可以在代码当中直接包含httplib.h,可以参照下面这个链接
httplib开源库
先查看自己的gcc是什么版本
gcc -v
我的gcc版本低,需要更新
2.1.首先切换到root用户
2.2.其次执行下面这两个命令
yum -y install centos-release-scl
yum -y install devtoolset-7-gcc devtoolset-7-gcc-c++ devtoolset-7-binutils
2.3.打开当前用户的家目录下的bash_profile
vim ~/.bash_profile
2.4.打开以后在最后添加下面的一行命令,然后保存退出
scl enable devtoolset-7 bash
2.5.最后一步, 执行下面这个命令,使刚刚的修改生效,就更新完成了
source ~/.bash_profile
再一次使用gcc -v 查看
gcc更新完成✅
首先切换到root用户,然后执行这两个命令
yum install jsoncpp
yum install jsoncpp-devel
jsoncpp安装完成✅
4.安装boost环境ctemplate参考链接
安装步骤(只支持centos7 x86_64)4.1 在root用户下执行下面的一行命令
sudo yum install -y snappy-devel boost-devel zlib-devel.x86_64 python-pip
4.2 在root用户下执行下面这一条命令
sudo pip install BeautifulSoup4
4.3 在普通用户下执行下面这三条命令
git clone https://gitee.com/HGtz2222/ThirdPartLibForCpp.git
cd ./ThirdPartLibForCpp/el7.x86_64/
sh install.sh
boost环境配置完成✅
小插曲在安装boost时,提示我没有pip,需要安装一个,如果上面的五条命令你都没有问题,可跳过此部分
1.执行下面的命令
yum install python-pip
提示我没有可用的包
2.接下来执行
yum -y install epel-release
3.再执行
yum install python-pip
4.最后一步,升级pip
pip install --upgrade pip
pip安装完成✅
首先我们打开码云当中的cpp-httplib链接,下载httplib.h
我用的是这个开源库,仅供参考httplib开源库
httplib,可以帮助我们创建一个http服务,不需要关心tcp和http的解析过程,解析完毕http请求之后,会按照请求的方法,找到程序当中对应的接口,进行处理
如果找到请求对应的处理方法,则回调接口如果没有找到对应的处理方法,则不处理
我们是依赖class Server类来创建http服务的
Server类的回调函数
函数名字,就是当前注册回调函数的方法
函数名字是get表示我们可以处理get方法的请求函数名字是post表示我们可以处理post请求
也需要在指定侦听ip和端口
第一步、在自己的目录底下创建三个文件夹
1.bin——放可执行程序的文件夹+配置文件的
2.code ——源码目录
3.test ——测试目录
第二步、测试httplib,在code下编写一个test.cpp
1 #include2 #include "httplib.h" 3 4 //回调函数 5 //Request和Response都是在httplib.h中定义的,因此加上httplib:: 6 void func(const httplib::Request& req, httplib::Response& resp) 7 { 11 printf("recv abcn "); 12 } 13 int main() 14 { 15 //创建httplib当中的sever类对象,使用该类对象,模拟创建一个http服务器 16 httplib::Server svr; 17 svr.Get("/abc",func); 18 //监听 19 svr.listen("0.0.0.0", 18989); 20 21 return 0; 22 }
编译运行后,在浏览器中访问Ip和端口,对应的服务端收到了结果
如果你也是上面这样的结果,就证明你的httplib已经了
但是我们在浏览器中看不到什么东西,我们可以用set_content给响应体一个返回值
在代码的回调函数中加上
resp.set_content("99
1 #include
2 #include "httplib.h"
3
4 //回调函数
5 //Request和Response都是在httplib.h中定义的,因此加上httplib::
6 void func(const httplib::Request& req, httplib::Response& resp)
7 {
8 //给响应体一个返回值
9 resp.set_content("99", 15, "text/html");
11 printf("recv abcn ");
12 }
13 int main()
14 {
15 //创建httplib当中的sever类对象,使用该类对象,模拟创建一个http服务器
16 httplib::Server svr;
17 svr.Get("/abc",func);
18 //监听
19 svr.listen("0.0.0.0", 18989);
20
21 return 0;
22 }
就可以在浏览器中看到
到这里就测试完毕了✅✅✅✅✅



