XJOJ历经2个月终于完成啦~~

XJ Online Judge System历经2个月终于完成了,其实早在大二上学期末的时候就开始写了,不过当时由于一些原因没能坚持写下去,这学期大三上期末的时候又想写了,于是把原来的程序全部重写了一遍。
系统目前只能运行在Linux系统中,里面使用了少量的QT4的东东,该OJ系统的特色有:
1。采用C/S结构来进行评测,S端只负责取题以及更新状态与客户端交换信息,C端进行全部的评判工作,编译-》运行-》评测等等。C端采用多线程技术,这样C端可以运行在多台机器上,每台机器又可以多线程评测,于是web服务器的压力非常小,并且评测的并发度可以非常大。同时,一个评测线程的意外死亡也不会影响其他的线程。
2。S端取任务不是无限循环的去读取数据库,而是使用了生产者/消费者模型,生产着负责周期性的一次从数据库中取出多个任务丢到任务缓冲池,消费者从任务缓冲池中读取任务发送给C端进行评测。当没有任务时,消费者和C端都会挂起睡眠,这样,对系统的资源利用率会很高。
3。安全性很高,一般考虑了安全性的OJ大多数只是用一个权限非常低的用户来执行用户提交的程序,但是这还远远不够,用户仍然能够提交对系统产生破坏性的程序,比如不停的fork(),本OJ对静态程序(C,C++等)采用了linux内核级别的调试工具ptrace,可以追踪用户程序所有的系统调用,对有危险的系统调用进行截获,从根源上阻止了危险的程序。对于Java程序,采用了一个安全沙箱的技术,将用户提交的程序Main.class动态载入到安全沙箱中以一个线程来运行,这样安全沙箱就可以彻底控制用户程序的运行状况。
4。对Java程序的评测准,一般的OJ把Java程序的运行当作普通的静态程序来运行,这样不仅会导致安全问题,也会使得评测用户程序运行的时间,消耗的内存非常不准确。因为我们知道,Java程序是必须运行在JVM下的,而启动JVM的时间是很长的,JVM所占的内存也是相当大的。本OJ由于采用了上述安全沙箱的方式来运行Java程序,因此可以完全解决这个问题。
5。WEB方面,采用了PHP中很著名的SMARTY模板引擎,对很多页面进行缓存处理,使得服务器的压力进一步减小。

OJ的源代码已经放到 code.google.com上面了,欢迎大叫提建议,提bug哦,更加欢迎大家一起来继续开发(我现在也还在继续完善这个oj,如果有谁对这个感兴趣,想一起开发的,请联系我,我会把SVN发给你~)

 

http://code.google.com/p/xjoj/

 

把代码也放一份到这里,等明天回学校了去机房安装到服务器上再贴出 测试地址 ^_^

xjoj.rar下载

 

贴几个图片:

Client和Server端刚启动,Client连接Server:

 

我提交了一个Java的程序上去,开始评测了:

 

WEB页面(不是很好看...,没办法,没艺术细胞阿)

 

 

posted on 2009-02-21 01:36  woodfish  阅读(1541)  评论(3编辑  收藏  举报

导航