关于 Online Judge 判题沙箱的学习问题

2020-09-07 21:33:19 +08:00
 zxCoder

想从头造一个轮子,写一个 OJ 系统,其他 web 开发和业务逻辑相关的因为打过比赛比较清楚,但是判题这部分几乎没有任何基础,想问一下应该如何从零学起?是不是对系统底层,操作系统,系统安全这些方面要求很高? 或者目前有没有比较完善安全的这种判题器?

1607 次点击
所在节点    问与答
6 条回复
ysc3839
2020-09-07 23:13:03 +08:00
从底层研究不是不可以,但是太浪费时间了,还容易出现漏洞。建议使用 Docker 等现成的方案。
kipsora
2020-09-08 04:03:22 +08:00
参考一下 VFleaKing 的 UOJ 的沙箱?我很久之前自己仿(chao)造(xie)了一个,docker 可能没办法很好地测量时间和峰值内存吧,自己写隔离肯定不太行,所以比较理想的方案是在 docker 中跑沙箱(或者你对自己的沙箱足够自信也可以不用 docker )。

具体见: https://github.com/vfleaking/uoj/tree/master/judge_client/1/uoj_judger

不过我觉得从头造轮子这件事,用来学习一下操作系统编程感觉还行,真的要用不如先参考一下市面上有没有现成能拿来用的 OJ,自己写的 OJ 一是你走了之后维护会很麻烦,最后可能也没啥人用。
Ginray
2020-09-08 09:18:30 +08:00
如果写着玩玩,还是挺有趣的,可以参考下 hustoj,网上也有不少博客。
话说是不是 ACMER 想提升工程能力时都会不约而同想到做 OJ,hhh
acmerliu
2020-09-08 09:20:53 +08:00
基于 docker 方案我最近实现了一套,部署在阿里云上测试还可以,但是目前在获取容器内程序执行时间这里还没想到好的方案,其他的编译、运行、资源限制都可以,而且 docker 实现也不慢,一台服务器可以启多个 docker 实例判题,横向扩展也可以。楼主是想做这方面的事情嘛,可以加个好友相互学习,我也是想写一个 OJ 系统,liuning8521 。
zxCoder
2020-09-08 17:22:20 +08:00
看了几个开源的 oj 的判题模块,感觉特点就是没有统一的,啥类型的都有,找不到比较优秀的项目可以模仿和二次开发 orz
acmerliu
2020-09-09 20:08:26 +08:00
@zxCoder 基于 lorun 可以,底层是 c 语言,打包成.so ,上层 python 可以调

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/704995

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX