?

Linux系統下編程題在線評閱服務平臺的設計與實現

2019-09-10 18:44左悅林寧
現代信息科技 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數據庫失?。。躰");

其功能是:首先使用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失?。。躰");}

對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

91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合