一、项目源码
二、所用技术与开发环境
1.所用技术:
B/S结构开发模式
负载均衡系统设计
多进程、多线程编程
C++面向对象编程 & C++ 11 & STL 标准库
C++ Boost 准标准库
jsoncpp 第三方开源序列化、反序列化库
cpp-httplib 第三方开源网络通信库
ctemplate 第三方开源前端网页渲染库
mysql Connector/C mysql官方库
Ace前端在线编辑器
html/css/js/jQuery/ajax
使用Postman进行网络服务测试
2.开发环境
CentOS 7.8 云服务器
VSCode
Google Chrome
Mysql Workbench
三、项目宏观结构
1. 项目核心模块介绍
我们的项目核心是两个模块:
1. compile_server : 编译与运行模块。
2. oj_server : 文件/数据库交互,网页渲染,负载均衡,其他功能。
2.项目宏观结构
3. 项目数据流图
3.1 顶层数据流图
3.2 一层数据流图
3.2 二层数据流图
4.编写思路
采取从后端向前端实现的思路:
1. 先编写 compile_server
2. 再编写 oj_server
3. 接着设计 文件版题库
4. 然后完成前端的页面设计
5. 最后实现 MySQL版题库
先编写整体结构(需要什么函数),然后再实现函数细节(包括返回值和参数的调整)
四、compiler_server目录
0.目录介绍
目录说明:保存提供在线编译服务核心的模块
1. compile_server.cc (处理编译运行代码的网络请求)
2. compile_run.hpp (编译、运行的整合模块)
3. compiler.hpp (编译模块)
4. runner.hpp (运行模块)
1.compiler.hpp
2.runner.hpp
进程等待函数waitpid()的使用?
资源限制函数setrlimit()的使用?
3.compile_run.hpp(编译、运行的整合模块)
4.compile_server.cc (处理编译运行代码的网络请求)
5.使用Postman对compile_server进行整体测试
5.1 Postman是什么?
Postman是一款功能强大的网页调试、HTTP请求发送及接口测试用例运行的工具
能够模拟各种HTTP Request如GET、POST 、header、 PUT、 DELETE…等等
请求中还可以发送文件(图片、文本文件等)、额外的header等,实现特定的接口测试
能够高效的帮助后端开发人员独立进行接口测试。
5.2 Postman的安装
五、OJ_server目录
0.目录介绍
目录说明:提供OJ服务
1. oj_server.cc : 使用第三方开源库cpp-httplib,处理用户在网站发起的网络请求,通过处理好的html代码给用户构建网页。(目前能处理的请求: 4.1 申请题目列表 4.2 申请具体题目 4.3 判题请求。)
2. oj_control.hpp : 控制器模块,是后台开发的核心业务逻辑,其下有三个子模块:负载均衡模块,构建网页模块,判题模块。
2.1 负载均衡模块 : 选择出负载最低的主机。
2.2 构建网页模块 : 调用model模块和view模块来构建网页。
2.3 判题模块 :通过httplib库给负责编译运行的主机发送Josn串进行判题,并将判题的结果返回给上层
3. oj_model.hpp : 文件/数据库交互模块:直接跟文件与数据库进行数据交互的模块,对文件和数据库进行增删改查,将结果提交给上层。
4. oj_view.hpp : 渲染网页模块:拿到数据之后,使用ctemplate库渲染网页,再将渲染好的网页代码返回。
1. oj_server.cc
2. oj_control.hpp
2.1 构建网页模块
2.2 负载均衡模块
2.3 判题模块
3. oj_model.hpp
3.1 文件版
3.2 数据库版