栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

【在线OJ模拟项目】01——项目环境搭建及基本测试_oj系统搭建?

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【在线OJ模拟项目】01——项目环境搭建及基本测试_oj系统搭建?

文章目录

✔项目目的

项目实现什么功能项目模块划分 ✔环境搭建

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开源库

2.升级gcc 1.查看gcc的版本

先查看自己的gcc是什么版本

gcc -v


我的gcc版本低,需要更新

2.更新步骤

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更新完成✅

3.安装jsoncpp

首先切换到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,需要安装一个,如果上面的五条命令你都没有问题,可跳过此部分

pip安装步骤

1.执行下面的命令

yum install python-pip

提示我没有可用的包

2.接下来执行

yum -y install epel-release

3.再执行

yum install python-pip

4.最后一步,升级pip

pip install --upgrade pip


pip安装完成✅

✔测试httplib-demo

首先我们打开码云当中的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 #include 
  2 #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 }

就可以在浏览器中看到

到这里就测试完毕了✅✅✅✅✅

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/783028.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号