首先,做这个项目的第一步是了解它,这样才能在以后的实际编写中做到心里有数。
我们小组选择的项目为“基于信号处理的在线云评测系统OJ(Online Judge)”,OJ(Online Judge)是一个在线的程序评测系统,学生通过该系统可以充分锻炼自身的编程水平。以往的评测系统往往存在资源分配不均等多种问题,我们团队希望在过去的基础上,在服务器底层进行优化,通过对服务器处理资源的合理使用,以及使用轮询队列对大量并发请求的处理,再通过系统信号同步进行精确的判断,创建一个更为优质的在线云评测系统。
要完成的目标
通过小组团队合作完成本次“基于信号处理的在线云评测系统“实训,熟练掌握Python、HTML和JavaScript语言,了解并会使用当前流行的架构搭建Web应用,最终实现一个B/S架构的在线程序评测系统。通过不断的迭代优化,创建一个效率表现优异的在线云评测平台,能够处理大规模的程序处理请求并准确返回结果,并具备一定的安全性。
系统功能主要划分为以下四个功能,具体业务需求描述如下:
1.评判内核
处理客户端传送来的程序运行请求,基于服务器使用的Linux系统,通过信号同步来获取每一个线程的运行结果,调用Linux内核的API来操作,监视每一个线程直到其运行结束,对于返回状态进行逻辑判断,获得该线程的真实终止信号。对于用户提交的程序返回合适的结果,并对程序正确性进行判断。
2.保证系统安全性
安全性是OJ最大的问题,因为需要用户在我们的系统上编译程序并运行,这时要防范恶意代码对系统造成影响。我们将会对用户提交的代码进行安全性检测,要用低权限运行程序、有可能的话使用沙箱限制更多的权限;保证网站安全,防sql注入等;防范编译器修改:去掉不安全的.h和obj;进行源代码分析,定义一些危险关键字,实现关键词过滤。
3.建立队列保证系统在大流量下正常使用
为应对未来系统投入使用之后,用户量增大,或者一桶作为做大型比赛的载体,需要在服务器要做队列,并实现多服务器评判。
4.前端建设
建立一个美观简洁的前端界面,保证系统有一定美感的同时,清晰的向用户提供我们的题目列表,以及提供给用户直观方便的做题界面。
经过讨论我和另一位组员贾鹏林组成一队来负责数据库方面的搭建。