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无码人妻精品一区| 啪啪永久免费av| 91精品国产一区| 四虎永久免费在线| 欧美a网站| 国产欧美亚洲精品第3页在线| 色综合中文| 亚洲狠狠婷婷综合久久久久| 日韩在线第三页| 精品乱码久久久久久久| 精品视频一区二区三区在线播| 2020国产免费久久精品99| 国产电话自拍伊人| 精品久久蜜桃| 亚洲天堂久久| 欧美区一区二区三| 国产黄网永久免费| 亚洲第一黄片大全| 亚洲男人的天堂久久香蕉| 999在线免费视频| 亚洲精品爱草草视频在线| 看国产一级毛片| 中文字幕乱码中文乱码51精品| 激情在线网| 久久99热66这里只有精品一 | 波多野结衣一区二区三区88| 伊人婷婷色香五月综合缴缴情 | 亚洲国产中文在线二区三区免| 国产午夜在线观看视频| 成人在线综合| 狠狠色综合久久狠狠色综合| 国产精品福利在线观看无码卡| 日本91视频| 日本欧美午夜| 青青草91视频| 成人毛片免费在线观看| 日本不卡在线| 人妻免费无码不卡视频| 国产成人艳妇AA视频在线| 波多野结衣视频一区二区 | 成人午夜亚洲影视在线观看| 亚洲AV无码一区二区三区牲色| 精品三级网站| 爆操波多野结衣| 国产91无毒不卡在线观看| 久久久久人妻一区精品| 亚洲成人免费在线| av午夜福利一片免费看| 久热99这里只有精品视频6| 99这里只有精品6| 亚洲人成网站在线播放2019| 伊人久久大香线蕉成人综合网| 欧美三級片黃色三級片黃色1| 中文字幕人妻无码系列第三区| 久久国产乱子| 日韩专区欧美| 真人高潮娇喘嗯啊在线观看| 欧洲日本亚洲中文字幕| 国产屁屁影院| 免费观看国产小粉嫩喷水| 国产精品国产三级国产专业不| 国产精品视频第一专区| 亚洲首页在线观看| 国产H片无码不卡在线视频| 中文字幕乱码二三区免费| 青青草91视频| 精品夜恋影院亚洲欧洲| 国语少妇高潮| 一级一级特黄女人精品毛片| 欧美精品亚洲日韩a| 国产成人亚洲精品无码电影| 97国产在线观看| 九色视频一区| 久久婷婷五月综合97色| 午夜日韩久久影院| 在线国产欧美| 国产美女叼嘿视频免费看| 99视频在线观看免费| 欧美性色综合网| 欧美全免费aaaaaa特黄在线|