
网站放在Linux或者Windows上其实问题都不大。但是鉴于,如果你的平台今后要拿出去办比赛等活动,那么一个正版的Windows商业授权是需要的。所以为了更加经济,选择Linux平台可能更好一点。
但是你的判题核心的部分一定要放到Linux环境下。一个,正式比赛的最终判题环境是Linux;二者,Windows上使用GCC系列的编译器毕竟和Linux下有不少的差距,最终可能会导致很多蛋疼的问题。
Web部分
这部分没啥好说的,基本上用啥都行,和普通的Web方案没啥区别。Django、ROR、.Net、J2EE、PHP等等,没什么特殊的地方。
判题节点
判题部分是整个OnlineJudge网站的核心所在。一般建议把判题部分单独抽出来成为一个服务,这样便于随时通过增加判题节点来加快判题的速度。
我们目前的思路是,Web端通过发送判题的请求给RabbitMQ等消息队列,每一个判题节点就是一个worker,这样可以非常简单的扩展判题节点的数量。
如果网站需要提供代理POJ、ZOJ、HDU等OJ的判题功能的话,可以同样的使用上述的思路,构建代理判题的节点,自由扩展。
判题核心
判题核心就是实际去编译、运行用户提交上来的代码的程序。可以成为一个sandbox沙盒。由于本人对Windows的API不是很懂,所以是在Linux上写的。安全性问题,可以参看这个回答Online Judge 是如何解决判题端安全性问题的?,基本思路都是这样。通过fork出另外一个进程,通过设置时间、内存等限制,通过ptrace进行监控,对系统调用进行限制,来解决安全性问题。
但是现在有一个新的思路,就是对判题核心很简单的运行用户的代码,计算时间、内存的使用量,把所有的安全性问题交给Docker来解决。因为Docker是一个非常轻量级的虚拟化方案,启动一个Docker容器就和启动一个程序一样快速,所以把判题核心的程序放到Docker里,就算用户代码搞破坏,最终挂掉的也就是Docker的容器。只要处理好和Docker的交互就可以了。但是这只是一个设想,还没有最终实现,还处于开发阶段,但是思想应该是可行的。
使用远程终端登陆Linux服务器,接着就是来安装jdk:
在oracle网站下载jdk,这个很简单,自己一进去就可以找到下载的地方
选择适当的包,比如Linux是32位的就选32位的包,64位的就选64位的包
2. 比如:jdk-6u21-linux-i586.bin
3. 通过ftp上传下载的包到Linux服务器上
4. 执行:sh jdk-6u21-linux-i586.bin 或者 ./jdk-6u21-linux-i586.bin
5. 配置:
在自己的主目录下,如我的主目录为/home/zhujiadun/ ,如 .bashrc 文件,末尾加下如下信息
JAVA_HOME=/home/zhujiadun/jdk1.6.0_21JAVA_BIN=/home/zhujiadun/jdk1.6.0_21/bin
PATH=$PATH:$JAVA_HOME/bin
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME JAVA_BIN PATH CLASSPATH
6。然后重启,即可
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)