Linux系统下编程题在线评阅服务平台的设计与实现

2019-09-10 18:44:35左悦林宁
现代信息科技 2019年10期

左悦 林宁

摘  要:为了满足编程题在线评阅对响应时间、并发处理能力的需求,本文结合Linux操作系统的稳定性好、多任务和多用户等特点,提出在Linux操作系统下架设在线评阅服务器的方法。本文就在线评阅服务平台的技术进行了探讨,给出了评阅服务器的技术性指标、自启动评阅服务进程的方法、service服务进程对Mysql数据库操作和多进程并发评阅的具体实现方法等,文中提出的技术使得评阅服务器具有良好的稳定性和较强并发处理能力。

关键词:Linux系统;编程题;在线评阅;并发处理能力

中图分类号:TP311.1       文献标识码:A 文章编号:2096-4706(2019)10-0097-03

Abstract:In order to meet the demand of response time and concurrent processing ability for programming online review,combining the advantages of Linux operating system,such as good stability,multi-task and multi-user,this paper proposes to set up on-line review server under Linux operating system. This paper discusses the technology of the online review service platform,and gives the technical index of the evaluation server,the method of self-starting the review service process,the concrete realization of the operation of the Mysql database by the service process and the concurrent evaluation of the multi-process and so on. The technology proposed in this paper makes the evaluation server have good stability and strong concurrent processing ability.

Keywords:Linux system;programming questions;online judging;concurrent processing capability

0  引  言

Linux是一个开源的、多任务、多用户操作系统,大多数企业或个人选择在Linux操作系统上搭建FTP服务器、DHCP服务器和Web网站服务器等。Linux操作系统被选作服务器的主要原因有这几个方面:第一,Linux系统具有较好的稳定性,安装在Linux的服务器可以连续运行,无须关闭服务器;第二,Linux系统可以使大量用户在同一服务器上工作而不会出现任何问题;第三,Linux操作系统的代码是开源的,对于其他操作系统,代码并非每个人都可以自由使用;第四,Linux服务器还可以执行多任务,即Linux系统能够处理同时运行的许多不同程序。

本文所开发的平台要求具有实时在线评阅功能,为了提高在线评阅的响应速度,要求服务端具有多用户、多进程并发处理学生提交的程序的能力,因此,Linux操作系统非常适合用来搭建在线评阅平台。

1  运行环境的需求

1.1  服务端需求

评阅平臺采用B/S和C/S混合模式进行开发。不同于只采用C/S模式的判分系统,程序的运行和评阅由客户端完成,服务器端只用来接收数据。本系统中,程序首先由客户端提交到服务器端,然后由服务器端的评阅进程调用不同的函数和命令对程序运行评阅,服务器的负载相对来说比较重。目前硬件的性能已经非常好,而且价格相对便宜。服务器可以根据实际使用的人数来选购,既要避免服务器的负载相对过重,又要避免资源的浪费。软件运行环境:操作系统为CentOS,网络协议为TCP/IP,Web服务器为apache-tomcat,jdk编译环境,数据库为Mysql。

1.2  客户端需求

对客户端的硬件要求不高,硬件上只要网络连通,能浏览和处理数据即可。软件运行环境:操作系统为Windows,网络协议为TCP/IP,浏览器为Internet Explorer 8.0以上或Mozilla Firefox等。

2  评阅服务平台的技术性指标

评阅服务端主要考虑硬盘存储容量、执行速度、判分响应时间、吞吐量及易维护性等。

(1)存储容量:本文所开发的系统主要对编程题进行评阅,不同于其他评阅系统,只有完成后才可进行答卷的提交,而且只能提交一次。对于程序题的评阅,为了提高评分的准确性,应允许学生在规定时间内进行多次提交,服务端应将所有的提交程序全部记录,以便事后查询。面对大量的数据,有限的存储空间,系统应对提交的程序大小进行限制。

(2)执行速度:作为自动评阅系统,系统对学生提交的程序应实时评阅,结果出来后立即返回给学生。

(3)响应时间:对提交的程序不能进行长时间的评阅,因此,评阅时间应控制在一定的范围内。

(4)吞吐量:吞吐量是指单位时间内评阅系统完成的交易数量。考试或集中练习过程中,也是系统用户登录最多的时候,系统吞吐量达到最大,系统应满足最大吞吐量的需求。40FD3F09-BDE3-4BBD-A00E-4B8210CE6395

(5)易维护性:在练习或考试过程中,不管是服务进程还是客户端在出现故障中断后,都应具备考前数据恢复功能,保证考试继续进行。

3  评阅服务进程的启动

有时因断电或者其他因素的影响,服务端需要重新启动,自动评阅进程需要自动启动。在本系统中,评阅服务程序采用C语言进行开发,经过编译后生成service可执行文件,放在/home/run/cserver目录下。编写shell script脚本文件runserver.sh,脚本程序主要监控service进程是否启动,一旦监控到service没有运行,就会马上启动service进程;runserver.sh脚本程序如下:

while [ "" = "" ];

do

pid=`ps -ef|grepservice|wc -l`

if [ $pid -gt 1 ]; then

echo "service进程正在运行!";

else

/home/run/cserver/service

fi

sleep 1

done

runserver.sh脚本程序一个无限循环的程序,每隔一秒钟检查一次service进程是否运行,这样也避免了因特殊情况service进程突然中断,从而导致评阅服务停止。Linux服务器重新启动后,需自动执行runserver.sh脚本程序,可以在Linux系统的/etc/rc.local文件中加入语句sh/home/run/cserver/runserver.sh&实现。

4  评阅服务进程接Mysql数据库

4.1  Mysql数据库的连接

评阅服务进程在评阅后需要将评阅结果存入Mysql数据中,使用C语言连接Mysql数据库时,常用到一些C API函数如mysql_init、mysql_real_connect、mysql_close函数,下面代码是一个C语言连接本地Mysql数据库的代码片段:

MYSQL connect;

mysql_init(&myconnect);

if(mysql_real_connect(&myconnect,"localhost","lin","123456","Erex",0,NULL,0))

printf("连接Mysql数据库成功");

else

printf("连接Mysql数据库失败!\n");

其功能是:首先使用Mysql结构定义了结构变量my-connect,接着使用mysql_init()函数对myconnect变量初始化,然后使用mysql_real_connect()函数连接了本地数据库Erex,连接的信息保存到myconnect结构变量中,最后使用printf()函数提示是否连接成功。

4.2  Mysql数据操作的实现

评阅服务进程在对Mysql数据操作前,先连接数据库,myconnect()为自定义函数,连接成功返回1,否则返回0。图1为service进程操作Mysql数据库的流程图。

由于service进程可以并发评阅学生提交的程序,service产生的多个子进程可能会同时读写一个数据表中的数据,这可能造成数据表中的数据错误,如:A进程读取了数据表table的数据,在A进程处理数据的过程中,至A进程写入数据到table之前,是不允许其他进程读写table中的数据的,否则,可能会造成数据错误。因此,在读数据之前评阅子进程需先对数据库中特定的表进行锁定操作,然后再对表中的数据进行其他操作。如下面的程序片段:

sprintf(cxnr,"lock table t_recordswrite,t_answer-filewrite,t_exam_lib write;");

if(mysql_real_query(&con,cxnr,(unsigned int)strlen(cxnr)))

{ printf("锁定表t_records,t_answerfile,t_exam_lib失败!\n");}

对t_records,t_answerfilewrite,t_exam_lib三张表锁定的写操作,其他进程不能再往这三张表输入数据,直到解锁。

5  多进程并发评阅的实现

5.1  service守护进程的创建

service守护进程是在后台运行的特殊进程,用于完成在线评阅的任务,Service进程在操作系统启动后启动,并一直运行除非系统关闭。由于守护进程是脱离控制终端的,因此首先创建子进程,终止父进程,之后所有的工作都在子进程中完成。Service进程脱离控制终端的关键代码:

pid_t child1,child2;

child1=fork();

if(child1>0) exit(0);

setsid();

chdir("/home/runspace");

umask(0);

上述程序中,fork()函数创建子进程并返回值至child1中,exit(0)语句终止了父进程的运行,子进程调用setsid()函数创建新的会话,chdir("/")改变工作目录到/home/runspace,umask()用于重设文件掩码。

5.2  多进程评阅的实现

service守护进程监听到新的任务时,调用fork()函数创建新的子進程,评阅任务由子进程完成,父进程继续监听新的任务。这样service守护进程仅仅负责新任务的监听,并产生新的子进程,评阅的任务全部交给子进程完成,这样大大提高评阅的并发处理能力,缩短在线评阅的响应时间,提高系统的吞吐量。

6  结  论

本文中阐述的在线评阅设技术已应用到C语言编程题在线评阅系统上,经过实践证明服务器具有良好的稳定性和较好的并发处理能力,对其他服务器的开发有一定的借鉴意义。

参考文献:

[1] 吴文刚,张志文.信息安全等级保护Linux服务器shell脚本测评方法 [J].现代工业经济和信息化,2017,7(13):59-61.

[2] 卢云宏,侯文涵,赵前,等.基于Linux的OnlineJudge在线提交环境的搭建 [J].电子技术与软件工程,2017(12):50-51.

[3] 刘加海,张益先,等.Linux软件工程师(C语言)实用教程 [M].北京:科学出版社,2009.

作者简介:左悦(1981-),女,汉族,辽宁盘锦人,讲师,硕士,研究方向:图形图像处理、计算机应用。40FD3F09-BDE3-4BBD-A00E-4B8210CE6395