如何在网站服务器上搭建OJ?

如何在网站服务器上搭建OJ?,第1张

*** 作系统的选择

网站放在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_21  

JAVA_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。然后重启,即可


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/7901279.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-11
下一篇2023-04-11

发表评论

登录后才能评论

评论列表(0条)

    保存