HUSTOJ实现的相关想法

来源:互联网 发布:vscode c 智能提示 编辑:程序博客网 时间:2024/05/16 02:28

这两天通过读 HUSTOJ 的源码,是我对OJ系统有了初步的了解,对整个系统的构架有了浅薄的认识。拿HUSTOJ来讲,HUSTOJ的结构是典型的LAMP服务器,就是linux+APACHE+MYSQL+PHP,以及用C++/C写的评测机核心。

HUSTOJ有两种数据交互的模式,两种的不同点在于,是评测机核心通过http向php传输数据的方式更新评测结果,还是直接连接mysql,将最新的评测结果写入数据可中,然后再让web端查询mysql。两者的想点在于,web端在获取用户上传的数据后,将数据写入数据库,然后让评测机去查询mysql。


HUSTOJ下面分三大模块:

1. core   评测机核心

2. php  前端

3. mysql   数据库


我现在主要研究的是core的部分,下面简述一下HUSTOJ的core的实现原理。

core也主要是分三个部分,分别是 judged、judge_client、sim,其中judged是core的入口,judged将solution(用户在前端提交的代码)分配给judge_client,judge_client再创建一个沙箱环境给用户程序,接着运行用户提交的代码(事先编译好了),接着运行sim模块来检测代码重复度,最后更新数据库或者通过http的方式传递数据给web端,最终的数据更新是在judge_client模块里面实现的。

简单说一下沙箱的实现原理,judge_client通过改变进程的文件根目录,从而使得当前进程及子进程对系统造成的影响被束缚在了一个可控的地方里面。


在此特别感谢 zhnlue 贡献 HUSTOJ 开源项目,学习到了很多东西


0 0
原创粉丝点击