在线OJ项目

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在线OJ项目相关的知识,希望对你有一定的参考价值。

需求:实现一个在线判题系统,用户通过浏览器编写和提交代码,通过网络传输,将代码上传到后台,后台对提交的代码进行编译运行,将编译运行结果反馈给用户
在线OJ前后台的流程:
技术图片

第三方库:httplib,json,ctemplate,boost

项目分为五大模块:
网络服务模块
搭建http服务器:
本人采用的是GitHub上提供的开源的httplib.h库,在搭建http服务的时候,只需要我们包含该头文件就可以使用了
提供http服务,串联试题模块和编译运行模块
1.获取题目列表
2.提交选中的题目
3.提交题目代码和题目描述,代码的编译框
试题模块
1.从配置文件中加载题目
a.配置文件格式:
约定配置文件当中对题目的描述
题目的编号,题目的名字,题目所在的目录,题目难度
b.加载题目的配置文件,使用数据结构保存加载出来的题目的介绍信息
c.针对每一道题目而言,需要根据给出的路径进行加载
2.提供获取整体题目的接口
给网络服务模块提供一个可以获取所有题目描述的接口,展示给用户
3.提供单个题目的接口
给网络服务模块获取单个题目描述和作答的接口,展示给用户
编译运行模块
1.编译
a.将用户提交的代码写到文件中
b.创建子进程,并且进行程序替换为g++程序,进行编译源码文件
c.获取编译结果写到标准输出文件当中或者写入标准错误文件中
2.运行
a.如果代码走到运行阶段,说明一定编译出来可执行程序了,创建子进程,并且让子进程进行程序替换,替换成可执行程序
b.将程序运行结果,保存到标准输出或者标准错误文件中
日志模块
1.提供时间戳服务:为了区分不同的用户提交的代码,当代码写到文件当中的时候,使用时间戳来进行一个区分
工具模块
1.实现切割字符串的函数
2.提供写文件操作
3.提供读文件操作
4.提供URL解码操作

源码地址:https://github.com/wake5up/My-c--code/tree/master/OJ-project

以上是关于在线OJ项目的主要内容,如果未能解决你的问题,请参考以下文章

项目基于负载均衡的在线OJ项目

在线OJ项目

项目:在线OJ--MinMIn‘s Online OJ

测试:MinMin‘s Online oJ在线OJ项目

关于在线OJ训练营项目的设计思路

关于在线OJ训练营项目的设计思路