共计 563 个字符,预计需要花费 2 分钟才能阅读完成。
内容目录
项目介绍
使用Java + Docker技术实现的一个可用于在线判题系统的代码沙盒(sandbox),可通过Http进行调用。
Docker的容器化技术可以为我们隔离出一块非常安全的运行空间,通过Java程序,自动化将代码拷贝到容器中执行并获取响应结果。
我们可以通过设置容器的最大内存、CPU核心数量等来限制代码运行的环境从而保护计算机的安全。
技术点
- 使用docker-java操作Docker,实现镜像拉取、容器创建、代码执行等;
- 使用简单工厂、模板方法等设计模式来扩展其他语言的代码沙盒实现。
效果
目前只实现了Java代码沙盒,其它语言需要进行扩展编写
标准输入输出(输入数据可为空)
代码错误
这里演示的是代码编译错误
超时恶意代码
超出最大时间限制会自动停止程序的运行,这里的Java程序设置的是2秒
内存溢出恶意代码
超出容器内存限制会自动停止程序的运行,这里设置的100Mb。
读取代码和删除代码
容器内部的文件信息不会涉及到本机信息,删除容器内部文件不会影响到本机。
优化点
因为代码沙盒需要通过一层Http请求来操作Docker,因此整个运行代码的过程所需时间会多一些,这在大量并发请求的时候,会影响整个沙盒判题的吞吐量。
正文完