999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于消息隊列的在線編譯系統(tǒng)

2016-07-19 01:42:20于述春
懷化學院學報 2016年5期

于述春,  葉 青,  王 鵬

(懷化學院 計算機科學與工程學院,湖南 懷化 418008)

?

基于消息隊列的在線編譯系統(tǒng)

于述春,葉青,王鵬

(懷化學院 計算機科學與工程學院,湖南 懷化418008)

摘要:在線編譯系統(tǒng)是程序設計類網(wǎng)上課程練習或程序設計競賽類網(wǎng)站的一個關鍵組件,其性能直接影響到系統(tǒng)或網(wǎng)站所支持的并發(fā)用戶數(shù).基于消息隊列的在線編譯系統(tǒng)將在線編譯服務與Web服務器變成松耦合結(jié)構(gòu),因而可通過部署更多套在線編譯服務來支持大用戶量并發(fā)訪問.論文提出了以消息隊列作為Web服務器和在線編譯系統(tǒng)的中間組件,分析了二者交互的接口技術(shù)JMS以及activemq-cpp,并研究了對于C/C++程序如何限制其運行時間和所用內(nèi)存.測試結(jié)果說明了這種松耦合結(jié)構(gòu)是可行的.

關鍵詞:消息隊列;JMS;activemq;在線編譯

1引言

編程類在線練習因為方便及練習結(jié)果可馬上知道而大受學習者歡迎[1,3,13],特別是隨著MOOC[12,14]課程的興起,程序設計類在線課程數(shù)量就更多了,因而訪問量上升,原來未考慮的性能問題現(xiàn)在變成了必須考慮并解決的問題.這種在線編譯與評判技術(shù)最先被很多ACM競賽類網(wǎng)站采用,作為提供練習與交流的工具.在網(wǎng)站訪問量少,并發(fā)訪問數(shù)未達到臨界點時,系統(tǒng)根本不受在線編譯性能影響[2,4,6,7,8,9,10,11].隨著并發(fā)訪問量增大,系統(tǒng)的性能極大受限于在線編譯系統(tǒng).例如,一類全國類的競賽就因為受到在線編譯系統(tǒng)性能的影響,導致比賽時許多參與者的代碼不能及時提交,影響成績.

語言類編譯器,根據(jù)編譯結(jié)果是中間碼文件還是機器可直接執(zhí)行的最終機器碼文件,依賴于平臺或與平臺無關.C/C++語言依賴于平臺,編譯成機器碼文件,因而在不同的操作系統(tǒng)上,需要用不同的編譯器;java語言由于編譯成中間字節(jié)代碼,因而其編譯產(chǎn)生的目標文件與平臺無關,故可用java API提供的編譯模塊.

在這樣的在線編譯系統(tǒng)中,由于其源文件由Web后臺提供,而且其編譯結(jié)果也需要通過Web反饋給前臺,因而與Web應用系統(tǒng)關聯(lián)密切.所以一種最方便的做法就是將在線編譯系統(tǒng)與Web應用服務器部署在同一臺機器上,或者讓在線編譯系統(tǒng)訪問與Web應用系統(tǒng)相同的數(shù)據(jù)庫.這種做法降低了在線編譯系統(tǒng)的可擴展性,因而,對于C10K問題其性能會顯著下降.

我們通過將在線編譯系統(tǒng)與Web應用系統(tǒng)中間耦合環(huán)節(jié)用消息隊列取代,使Web應用系統(tǒng)與在線編譯系統(tǒng)變成一種松耦合結(jié)構(gòu),因而構(gòu)建出一種可擴展的在線編譯系統(tǒng).

2系統(tǒng)模塊

2.1系統(tǒng)框架

構(gòu)建可擴展的在線編譯系統(tǒng)的關鍵是將Web應用系統(tǒng)與在線編譯系統(tǒng)的緊耦合結(jié)構(gòu)變成一種松耦合結(jié)構(gòu).我們采用消息隊列作為Web應用系統(tǒng)與在線編譯系統(tǒng)交互的中間組件.

系統(tǒng)框架如下所示:

圖1 系統(tǒng)構(gòu)架圖

圖1所示的構(gòu)架中,客戶端將代碼粘貼到文本框,提交到Web服務器后,后者指明語言類型,并將該編程題的輸入數(shù)據(jù)及結(jié)果文件數(shù)據(jù)一起組成一個編譯請求,發(fā)送到消息隊列,編譯服務程序通過消息隊列獲取一份編譯請求,進行編譯或運行,將結(jié)果返回.

2.2前端頁面

前端頁面除了為用戶提供編輯代碼的界面外,還有一個作用:等待接收編譯服務返回的編譯或運行的結(jié)果.通過用一個消息隊列的異步模塊,頁面通過javascript啟動消息隊列異步接收模塊.從而,使Web服務器對每個Web請求從同步處理變成異步處理,減輕Web服務器的負擔.

2.3Web服務器

Web服務器除了直接處理前臺的Web請求外,還將前臺提交的代碼的編程語言類型以及代碼所屬題目的測試數(shù)據(jù)及答案數(shù)據(jù)等一起組成一個編譯請求,用Java消息服務接口(JMS)發(fā)送到消息隊列.前臺提交的代碼其結(jié)果直接由編譯服務通過消息隊列傳遞給客戶.

2.4消息隊列

消息隊列在整個系統(tǒng)中起著一個中間件的作用,一端連接Web服務器,另一端連接編譯服務.它本身并不需要很多編程工作,只需要將其啟動運行即可.

2.5編譯服務器

編譯服務器主要完成用戶提交代碼的編譯或運行,如果編譯出現(xiàn)錯誤,則直接將編譯錯誤作為結(jié)果,發(fā)送到消息隊列,由客戶接收;如果無編譯錯誤,則用Web服務器提供的測試數(shù)據(jù)運行程序,將得到的結(jié)果與Web服務器提供的結(jié)果文件進行比較.并將運行結(jié)果通過消息隊列返回給客戶.

編譯服務器從消息隊列接收或向消息隊列發(fā)送消息,運用消息隊列activemq提供的C++編程接口.

3關鍵技術(shù)

3.1JMS接口

為在Web服務器中使用activemq消息隊列,需要一個activemq-client jar包,把這個jar包加入lib目錄后,就可使用JMS接口發(fā)送消息到activemq消息隊列了.

當收到客戶提供的代碼時,調(diào)用JMS接口將代碼放進消息隊列:

新建一個連接工廠;

創(chuàng)建一個連接;

創(chuàng)建一個連接上的會話;

在會話上創(chuàng)建一個主題;

設置代碼語言屬性;

將代碼作為消息發(fā)送到消息隊列.

3.2消息隊列通信接口

先下載activemq-cpp源程序包,接著下載其依賴包源程序包:cppunit,apr,apr-util,apr-iconv;然后再編譯四個依賴包,分別得到cppunit.dll,apr.dll,apr-util.dll,apr-iconv,最后再編譯activemq-cpp,得activemq-cpp.dll.

在編譯服務程序入口端,通過調(diào)用activemq-cpp接口從activemq消息隊列中接收提交的源程序:

獲取CMS連接工廠;

創(chuàng)建一個連接;

創(chuàng)建一個連接上的會話;

在會話上創(chuàng)建一個主題;

創(chuàng)建一個消息接收者;

重載onMessage()方法.

在onMessage()中接收提供的代碼.

在編譯服務程序出口端,將相關編譯錯誤消息或運行結(jié)果信息作為一個消息隊列到activemq消息隊列:

獲取CMS連接工廠;

創(chuàng)建一個連接;

創(chuàng)建一個連接上的會話;

在會話上創(chuàng)建一個主題;

創(chuàng)建一個消息發(fā)送者;

設置消息編號屬性;

發(fā)送消息到消息隊列.

在用activemq-c++編程接口從消息隊列接收或向其發(fā)送消息時,需要解決字符編碼問題.在Web服務器端,由于采用Java開發(fā),字符編碼用UTF-8,在編譯服務器一端,由于要以windows服務的形式運行,采用的編譯繼承windows默認編碼.由于兩端編碼不同,導致通過消息隊列收發(fā)的消息不正確.因此,我們提供了一個編碼接口.

3.3編譯服務

在編譯服務中,通過消息隊列接口獲取待編譯代碼及測試數(shù)據(jù)和測試結(jié)果,然后根據(jù)代碼語言類型分別調(diào)用相應語言的編譯服務.

Java語言類的編譯服務不是直接調(diào)用javac進行編譯,而是通過調(diào)用java動態(tài)編譯類進行編譯,同時獲取編譯可能的錯誤信息.

C/C++語言類的編譯服務只能直接調(diào)用不同平臺下的編譯器進行編譯,例如,windows平臺下調(diào)用cl,linux平臺下調(diào)用gcc/g++進行編譯,通過分析其輸出結(jié)果判斷編譯有無錯誤.

在編譯有錯誤時,停止對程序的運行,并將錯誤消息通過消息隊列接口發(fā)送到消息隊列.

當編譯正確時,對于所運行的用戶程序必須限制其資源和運行時間.對于java類程序,可通過動態(tài)編譯運行工具的支持對所運行的java程序設置內(nèi)存及運行時間的限制.

對于C/C++類編譯器生成的機器碼程序,由于無相關的動態(tài)編譯運行機制,必須通過system方法調(diào)用這些機器碼程序運行,因而比較難于控制.因此,在編譯服務程序中為每個編譯服務創(chuàng)建一個新進程,并將每個新創(chuàng)建的進程的啟動時間記錄到一個哈希表中,以進程句柄為鍵值,設置一個計時器,計時器中斷時間為1秒,在WM_TIMER事件中用當前系統(tǒng)時間減去哈希表中所記錄每個進程的啟動時間,如果超時,則調(diào)用TerminateProcess中止該進程,并通過activemq-cpp消息隊列接口向該用戶發(fā)送超時消息.

為監(jiān)控C/C++程序使用內(nèi)存情況,可用SetTimer設置第二個計時器,并將每個新建進程當前所用內(nèi)存記錄到第二個哈希表,也以進程句柄為鍵值,在WM_TIMER事件中用其計時器ID來區(qū)分第一個與第二個,用Get Process Memory Info函數(shù)獲取當前運行進程占用的內(nèi)存,每當某個進程所用內(nèi)存超過上限,則用Terminate Process終止此進程,并將內(nèi)存超限的錯誤消息通過消息隊列接口發(fā)送到消息隊列.

4測試環(huán)境與結(jié)果

測試環(huán)境:局域網(wǎng)帶寬100 Mbps,Web服務器由一臺PC機承擔,編譯服務放在另一臺PC機上,windows平臺.PC機2G內(nèi)存,Intel i3 4核CPU,客戶機也由PC機承擔.

測試過程:分別由5臺PC機作C、C++和java在線編程練習,檢驗其響應時間和結(jié)果.其中一個C程序是一個無限循環(huán)程序,另一個C程序則分配10M的內(nèi)存,導致內(nèi)存超限(內(nèi)存限制設置為2M),計時限制為1秒.對每個測試程序,都提交兩遍:一遍是正確的,另一遍是錯誤的.

測試代碼提交與結(jié)果返回:

圖2 代碼提交與編譯結(jié)果返回示意圖

左邊是代碼提交,右邊是由編譯服務器返回的編譯運行結(jié)果.

測試結(jié)果如表1.

表1 測試結(jié)果

測試結(jié)果說明對于C/C++程序運行的時間控制和使用內(nèi)存限制正常發(fā)揮作用,對于java程序運行的時間限制和內(nèi)存限制也是正常的;整個程序流程從前臺到編譯服務程序再返回到前臺是完全正確的.

我們再將編譯服務程序部署到一臺新的機器上,讓測試機器提交測試代碼,結(jié)果部署的兩套編譯服務程序都正常工作.這說明我們的基于消息隊列的在線編譯系統(tǒng)具有可擴展性.

5結(jié)束語

在線編譯系統(tǒng)是程序設計類網(wǎng)上課程或競賽系統(tǒng)的一個關鍵模塊,大多的這類系統(tǒng)都受限于部署在線編譯系統(tǒng)的機器的性能,所能支持的并發(fā)用戶數(shù)有限.我們的系統(tǒng)由于與Web服務器的耦合被消息隊列所間隔,因而可將在線編譯系統(tǒng)部署在其他機器上,而且部署機器數(shù)不會受到系統(tǒng)因素的限制,因而具有可擴展性.系統(tǒng)存在的一個問題是,編譯服務程序運行的結(jié)果直接返回給用戶,而未經(jīng)過Web服務器的評判記分,這是一個有待改進的地方.但編譯服務程序給出的結(jié)果信息還是明確的:提交的代碼是正確還是錯誤的.

參考文獻:

[1]田地.支持移動端的C語言在線編譯系統(tǒng)的設計與實現(xiàn)[J].信息通信,2015(1):113-115.

[2]尤楓,史晟輝,趙瑞蓮.編譯程序在線評測系統(tǒng)的實現(xiàn)[J].實驗室研究與探索,2010(12):69-73.

[3]張巍.在線編譯教學系統(tǒng)在C/C++課程中的應用與研究[J].才智,2009(11):69-70.

[4]劉曉君.基于Web的虛擬教學系統(tǒng)設計與實現(xiàn)[D].成都:電子科技大學,2012:31-43.

[5]蔣燕敏.自動判題算法及網(wǎng)絡考試平臺研究[D].杭州:浙江工業(yè)大學,2014,碩士論文.

[6]汪松松.基于在線服務模式的程序編譯平臺的研究[J].科技信息,2011(31):461-462.

[7]翟紅英,王波.基于C#.NET的在線編譯方法的應用與研究[J].計算機光盤軟件與應用,2013(7):97-98.

[8]梅剛,林齡,潘峰.基于Web的在線編譯環(huán)境設計[J].計算機時代,2015(5):29-31.

[9]汪松松.基于在線服務模式的程序編譯平臺的研究.2011(41):462+461.

[10]張恒升,陳翰博,王偉,等.基于net和Ajax的在線編譯器網(wǎng)絡平臺開發(fā)[J].價值工程,2010(5):152-153.

[11]陳元靜.基于J2EE/SSH在線代碼評測系統(tǒng)的設計與實現(xiàn)[D].成都:電子科技大學,2013:23-32.

[12]昝鎮(zhèn).面向MOOC的程序設計輔助教學系統(tǒng)[D].西安:西北大學,2014:32-45.

[13]熊茜,雷亮,許莎,等.基于在線判題系統(tǒng)的C語言實驗教學改革[J].重慶學院學報(社會科學版),2015(10):67-69.

[14]龍虎,張小梅,唐林海.大數(shù)據(jù)背景下智慧教育云平臺的構(gòu)建研究[J].電腦知識與技術(shù),2015(20):109-111.

The Online Compiling System Based on Message Queue

YU Shu-chun,YE Qing,WANG Peng

(CollegeofComputerScienceandEngineering,HuaihuaUniversity,Huaihua,Hunan418008)

Abstract:The online compiling system is the key component of the programming online course exercise or programming design contest,its performance directly affects the concurrent user number of the web site.The online compiling system based on the message queue make a loose coupling structure between the Web server and the online compiling service,so it can support more concurrent user by deploying more than one online compiling system.Paper proposed using the message queue as the middle component between the Web server and the online compiling system,analyzed the interactive interface technique,such as JMS and activemq-cpp,and studied how to limit the run time and the used memory of the C/C++ program.Test shows that this loose coupling structure is flexible.

Key words:message queue;JMS;activemq;online compiling

收稿日期:2015-11-29

基金項目:湖南省教育廳科研資助項目(13C714);懷化學院重點學科建設項目;懷化學院大學生創(chuàng)新項目.

作者簡介:于述春,1965年生,男,講師,研究方向:計算機網(wǎng)絡、云計算、計算機視覺.

中圖分類號:TP311

文獻標識碼:A

文章編號:1671-9743(2016)05-0056-04

主站蜘蛛池模板: 成人国内精品久久久久影院| 亚洲六月丁香六月婷婷蜜芽| 欧美怡红院视频一区二区三区| 精品伊人久久久香线蕉| 国产欧美日韩91| 国产午夜福利在线小视频| 亚洲视频四区| 综合社区亚洲熟妇p| 日本91在线| av在线无码浏览| 亚洲精品在线91| 3344在线观看无码| 亚洲天堂网在线播放| 无码视频国产精品一区二区| 噜噜噜综合亚洲| 国产亚洲高清视频| 国内精自视频品线一二区| 色悠久久综合| www中文字幕在线观看| 久久大香伊蕉在人线观看热2| 欧美精品黑人粗大| 在线精品自拍| www.91在线播放| 亚洲精品桃花岛av在线| 免费又爽又刺激高潮网址 | 国产精品视频导航| 超碰aⅴ人人做人人爽欧美 | 亚洲精品免费网站| 丰满人妻久久中文字幕| 免费高清a毛片| 亚洲欧美成人| 国产精品久久自在自线观看| 在线播放精品一区二区啪视频| 精品99在线观看| a毛片基地免费大全| 久久综合伊人 六十路| 精品综合久久久久久97| 97视频精品全国在线观看| 国产成人高清精品免费5388| 免费a级毛片18以上观看精品| 欧美中文字幕一区| 小说区 亚洲 自拍 另类| 91久久青青草原精品国产| 女人毛片a级大学毛片免费| 久久亚洲日本不卡一区二区| 91在线无码精品秘九色APP| 欧美激情视频二区三区| 亚洲自偷自拍另类小说| 波多野吉衣一区二区三区av| 免费不卡视频| 人妻无码一区二区视频| 国内精品自在自线视频香蕉| 99无码中文字幕视频| 99热国产这里只有精品无卡顿"| 久久久国产精品无码专区| 欧美精品亚洲日韩a| 亚洲成网站| 婷婷色婷婷| 华人在线亚洲欧美精品| 国产乱子伦手机在线| 国产日本欧美在线观看| 亚洲人精品亚洲人成在线| 国产成人福利在线| 青青青亚洲精品国产| 精品国产自在现线看久久| 亚洲一区二区三区国产精华液| 美女无遮挡拍拍拍免费视频| 五月婷婷综合色| 欧美国产中文| 无码日韩人妻精品久久蜜桃| 久久精品嫩草研究院| 欧美日韩激情在线| 亚洲青涩在线| 香蕉伊思人视频| 99热国产这里只有精品9九| 午夜福利视频一区| 动漫精品啪啪一区二区三区| 日韩午夜片| 欧美激情成人网| 亚洲国产成人综合精品2020| 成人毛片在线播放| 中文字幕在线日本|