基于Linux的OnlineJudge在线提交环境的搭建
作者:卢云宏 侯文涵 赵前 张丽颖 周世平
来源:《电子技术与软件工程》2017年第12期
        摘 要OnlineJudge(OJ)是基于图形化用户界面的在线评测系统,用于在线检测代码的正确性。本文利用python语言和Linux环境的命令行方式,为当前OJ设计并搭建一个基于Linux的纯命令行在线提交环境,使用该环境可以在纯命令行下向OJ提交题目。该环境成本低,占用资源少,运行速度快,服务端便于统一管理。
        【关键词】程序设计 命令行 在线提交环境(平台)
        1 前言
        人机交互随软件技术的发展而进步,一直在按照用户的期望向着友好、方便、自然的方向发展。人机交互从原始的命令行(Command Line Interface,CLI)到图形化用户界面(Graphical User Interface, GUI),再发展到现在的自然用户界面(NaturalUserInterface,
NUI)。虽然当前CUI已经不是主流了,但命令行技术作为更接近底层的文本模式,永远不会过时。
        随着程序设计基础教学的发展,各个高校纷纷建立OJ,但当前OJ平台是基于图形化用户界面的,目前还没有OJ平台使用命令行界面。针对当前的情况,本文使用纯命令行界面,设计并搭建了纯命令行的OJ在线提交环境。作为日常使用,图形化界面是方便且易于操作的,但作为服务器,图形模式会占用大量的系统资源,尤其是内存。基于服务器的考虑,该环境的搭建借用Linux环境的命令行方式。系统终端为纯文本,不使用图形化界面,占用资源少,运行速度快,可以对资源有效利用。另外,该系统运行环境相对简单,不需要太多的外部环境,客户端不需要特殊环境搭建,可以通过终端方式(借用putty,ssh,Xshell等工具)实现登录。
        2 实验平台环境搭建
        本文基于远程登录,ssh映射的原理,将OJ服务器与用户之间增加一个Linux服务器和一个中转服务器,搭建该环境。使用的搭建工具包括Linux服务器,OJ服务器,终端软件。搭建提交环境步骤如下:
        (1)实现端口转发。因为Linux服务器使用的是局域网,只能在特定(124)网段使用,需要将端口转发到中转服务器的特定(6666)端口上才能实现外网访问。
        (2)创建固定数目的学生账户和老师账户。vim命令进入编辑模式
        (3)给账户设定权限。使学生之间不能互相访问进入各自的目录下,但教师用户可以进入学生的目录。
        (4)将特定的功能分配到每个用户,如设定提交指令。
        这其中所有的操作通过shell脚本实现,每一个操作都建了一个脚本。
        当前OJ的结构是用户直接登录到OJ服务器,本文将OJ服务器与用户之间增加一个Linux服务器和一个中转服务器,各个服务器与运行在Linux服务器中的服务程序构成了为本校OJ设计的命令行提交系统。用户需要通过终端方式远程登录到Linux服务器,再进行相应操作,Linux服务器将登录请求和提交题目操作传递到OJ服务器,OJ服务器再对这些操作进行相应处理,再通过服务器之间的连接将结果依次返回。但是Linux服务器不能被用户直接访问,用户需要通过一个能被直接访问到的服务器登录到Linux服务器,所以我们将OJ平台的
服务器作为中转服务器,靠ssh端口映射将中转服务器与Linux服务器联系起来。为了加以区别,本文将中转服务器与OJ服务器分别表示。系统的数据交互体系结构如图1所示。
        3 系统实现
        该系统实现的功能主要包括用户登录、代码编写及编译、代码运行、代码暂存、用户提交、结果返回。用户通过终端程序,远程登录到Linux服务器,再登录OJ账号,连接到OJ服务器,进行想要进行的操作。代码的编写可以使用Linux系统中的编辑器(如vim等)。在终端中输入“vimtest(文件名称).c”,回车进入vim编辑器,进入编辑状态(按a键),输入代码语句。输入完成后,退出编辑状态(按esc键),输入“:wq”,按回车,可保存代码文件且退出vim编辑器回到终端命令窗口。代码的编译可以依靠gcc命令,输入“gcctest.c”编译代码,最后使用“./test.out”执行,查看结果。因为代码的编写、编译、运行和暂存功能是在Linux服务器内部实现的,所以在这里重点介绍一下用户登录,用户提交(包括结果返回)的过程。
        3.1 登录
        通过终端程序远程登录到Linux服务器后,用户要进行登录账号操作,通过命令行向Linux服务器提交登录请求,Linux服务器接收到请求后,返回相应结果,用户输入账号密码。登录具体操作通过python语言中的提交表单实现,服务程序将用户输入的账号密码提交到OJ服务器,OJ服务器对账号密码进行验证。若验证错误,则登录失败,将结果依次返回;若验证正确,Linux服务器对登录结果进行处理,判断用户是否属于学生组,若是,则需要判断学生是否使用的自己的账号,检测cookie是否有效,是则登录成功,否则登录失败。不属于学生组(属于教师组)则只需检测cookie是否有效。用户登录的流程如图2所示。
        3.2 题目提交
        题目分为两类,一类是OJ系统上普通的题目,可以任意选择提交,需要输入的参数有四个,格式如下:
        --problem
        其中第一个参数(problem)是题目的种类,第二个参数(Problemid)是题目序号,第三个参数(Code file)是代码所在的文件,第四个参数(Language)是编程语言的种类。
        另一类是作业题目,由学生将指定题目在规定时间内提交,需要输入的参数如下:
        --contest
        第二个参数(Contestcid)作业序号,其他参数意义同上。
        用户提交的参数传递到Linux服务器,Linux服务器获取到参数数据且未检测到无异常后,程序会利用参数构造POST数据,如果线程不出现异常,学生提交的代码会通过该程序的POST数据传输到OJ。OJ接收到数据后会进行提交、判题、检测相似度和返回结果等操作。程序通过抓取网页数据,返回抓取到的信息并显示到命令行。学生提交题目流程如图3所示。
        4 结果分析
        本文针对烟台大学OJ(202.194.119.110)搭建了在线提交平台,测试得到如下结果:命令行界面资源消耗少,占用内存少,运行速度优于图形化用户界面;对服务器配置要求低,成本低于图形化界面;服务端实验环境便于统一维护;暂存代码功能相比u盘存储,更加方便安全。另外学生使用该提交环境的同时增加了对命令行的使用,减少了对鼠标等外设
的依赖。
        5 总结
        本文针对当前程序设计基础教学中的需求,设计并搭建了基于Linux的在线提交环境,该环境实现了通过命令行提交代码的一系列功能。命令行不需要频繁地使用鼠标等其它交互手段,在熟练记忆命令的前提下,命令行的效率是所有的交互手段中最高的,通过使用该在线提交环境,可以快速便捷的进行命令行操作,提高了效率,节省了用户的时间。使用者在使用该在线提交环境的同时,对命令行有了更深入的了解,也提高了自己操作计算机的效率。
        参考文献
        [1]陈蒙,王锋,邓辉,季凯帆.基于Python的天文软件命令行界面设计与实现[J].天文研究与技术,2015(02):196-203.
        [2]李斌.怎样在程序中与命令行程序交互[J].电脑编程技巧与维护,2015(12):95.
        [3]房晓南,徐功文,孙云晨,张化祥,杜颜伶.基于.NET与在线评测的分布式程序设计教学实验平台[J].实验室研究与探索,2013(11):351-354+380.
        作者简介
        卢云宏(1972-),男,山东省烟台市人。博士学位。现为烟台大学计算机与控制工程学院讲师。主要研究方向为程序设计和编译技术。
        作者单位
        烟台大学计算机与控制工程学院 山东省烟台市 264005

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。