C++开源跨平台OJ系统判题核心—— FreeJudger(一)

C++开源跨平台OJ系统判题核心—— FreeJudger

By 马冬亮(凝霜  Loki)

一个人的战争(http://blog.csdn.net/MDL13412)

项目背景

本项目是为作者所在学校搭建OJ系统时衍生出来的一个项目,由于我的学弟、学妹们对Linux系统不熟悉,为了我们这批人毕业了以后,有人能维护OJ系统,因此选用了可以运行在Windows平台的开源OJ系统。

起初,我的一个同学用NOJ(南京航空航天大学的OJ)搭建起了我们协会最初版本的OJ,但是这套OJ系统的判题核心不开源,且安全性得不到保证,再加上其web界面实在是太难看,我的一位学长ZB选择hustoj做为协会的新一代OJ平台。hustoj最初被设计在Linux系统上运行,因此需要对其进行二次开发,经过验证,此OJ的移植工作主要集中在判题程序上。至此,作者ZB发起了FreeJudger开源项目,并希望藉由此项目,推动国内OJ的发展。

功能需求

  • 崩溃自动重启;
  • 支持并行/并发评判;
  • 支持多种语言的评判;
  • 能至少在Windows平台*nix平台运行;
  • 支持安全沙箱功能(限制程序运行内存、运行时间、对系统的访问/更改等),保证系统安全。

系统架构


可执行程序

分为守护程序监控程序两部分组成,其中守护程序是运行在后台进行评判的核心,监控程序提供一个GUI界面供用户获取守护程序运行状态,并对其进行控制(无需一直运行,可以在需要时,连接到守护程序,支持远程访问)。

PlatformLayer

  • PlatformLayer用于屏蔽操作系统的细节,其组成及功能如下:
  • logger:日志库,目前使用log4cxx作为核心;
  • xml:配置文件解析库,目前使用RapidXML作为核心;
  • filetool:提供对系统文件的基本操作(创建、删除文件/文件夹,读取、写入文件),目前使用Boost.FileSystem作为核心;
  • process:提供对进程的封装,其接口为仿Linux风格,目前各平台采用原生系统调用实现;
  • thread:提供POSIX兼容的线程封装,目前使用Boost.Thread作为核心;
  • taskmanager:提供任务管理器,用于管理判题任务;
  • sql:提供对数据库的抽象,目前支持MySQL数据库的操作;
  • net:用于实现守护程序监控程序之间的通信;
  • windowsapihook:用于屏蔽掉Windows Job在一些Windows平台上弹出“应用程序错误”对话框的问题,使用微软Detours库实现。
系统软件支持

用于支撑判题程序。

操作系统

FreeJudger要支持的操作系统平台,至少要支持Windows*nix

项目组织

构建工具及IDE

  • Windows平台:VC++ 2010
  • Linux平台:Makefile + Vim
  • 其他平台:Makefile

源码组织


目前正在进行Windows平台的开发,其说明如下:

  • Daemon文件夹:守护程序工程;
  • Test文件夹:用于临时测试代码的工程;
  • judgerlib文件夹:PlatformLayer层,每个模块一个工程;
  • thirdpartylib文件夹:用到的第三方库(需要编译的,在里面提供预先编译好的静态/动态库);
  • doc文件夹:项目文档;
  • Debug/Release文件夹:程序输出目录。

二级文件夹组织如下图所示:



项目主页

https://github.com/NsLib/FreeJudger

欢迎加入

群117975329,验证信息CSDN

主要维护人:

  • 周宝    you_lan_hai@foxmail.com
  • 马冬亮  mdl2009@vip.qq.com

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值