基于SSM框架和RabbitMQ技術的OJ系統(tǒng)的設計與實現(xiàn)_第1頁
基于SSM框架和RabbitMQ技術的OJ系統(tǒng)的設計與實現(xiàn)_第2頁
基于SSM框架和RabbitMQ技術的OJ系統(tǒng)的設計與實現(xiàn)_第3頁
基于SSM框架和RabbitMQ技術的OJ系統(tǒng)的設計與實現(xiàn)_第4頁
基于SSM框架和RabbitMQ技術的OJ系統(tǒng)的設計與實現(xiàn)_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

基于SSM框架和RabbitMQ技術的OJ系統(tǒng)的設計與實現(xiàn)*

戴施偉,周凌珉,鄭一泓

(浙江水利水電學院信息工程學院軟件工程系,浙江溫州325204)

OJ(OnlineJudge)系統(tǒng),是近十幾年隨著ACM事業(yè)在中國的進展而引入的一種在線練習和競賽系統(tǒng),最早設計效勞于ACM-ICPC國際大學生程序競賽的自動判題和排名,使用者可在線提交多種程序的源代碼(如C、C++、Java),系統(tǒng)會對源代碼進展編譯并運行,再通過后臺數(shù)據(jù)庫的測試用例來檢驗代碼的正確與否。隨著ACM的進展和我國的信息化教學方式的變革,國內(nèi)一些高校也開發(fā)了屬于自己的OJ系統(tǒng),其中也不乏有很多主流的OJ,杭州電子科技大學的HDOJ,浙江大學的ZOJ……。通過建立本校的OJ,不僅可以便利平常ACM隊員的訓練和競賽模擬,還可以添加獨創(chuàng)的題目,擁有屬于本校自己的題庫;

在日常教學方面,OJ系統(tǒng)不僅可以提高計算機專業(yè)的學生學習數(shù)據(jù)構造算法的積極性和學習效率,也為全部想提高自己程序算法力量的學生供應了一個練習的平臺。

1.1系統(tǒng)總體設計

結(jié)合實際需求,在框架整體的設計中本系統(tǒng)著重考慮了在高并發(fā)訪問下的效率問題。

系統(tǒng)使用了SpringBoot作為開發(fā)框架,它對于Spring中存在的重量級配置問題、工程的依靠治理、不支持分布式等問題進展了改善和優(yōu)化,精簡配置的同時便利對外輸出各種形式的效勞??紤]到安全性以及系統(tǒng)性能,采納判題效勞與后臺效勞分別的架構優(yōu)化方案,削減效勞器負擔的同時降低開發(fā)人員對系統(tǒng)維護的難度。兩者間通信采納RabbitMQ消息隊列,既可以提高并發(fā)量,又能降低效勞之間的耦合度,且具有更好的時效性。采納MySQL進展數(shù)據(jù)長久化存儲,其效勞敏捷,快速穩(wěn)定。最終前端頁面的開發(fā)使用Vue.js框架,簡潔高效。

1.2核心模塊設計

本判題系統(tǒng)劃分為三局部:前端交互、判題系統(tǒng)、后臺系統(tǒng)(見圖1)。在前端頁面中,依據(jù)功能需要,分別對每個角色進展界面設計。下面主要介紹判題模塊與后臺效勞模塊的功能。

圖1系統(tǒng)思維導圖

1.2.1判題模塊設計

為了系統(tǒng)的安全性,判題模塊應與后臺效勞模塊相分別,使用RabbitMQ消息隊列實現(xiàn)通信,采納心跳機制,定時向后臺效勞端發(fā)送判題端系統(tǒng)信息,用于展現(xiàn)判題端在線狀況。為了便于查看治理,判題系統(tǒng)應地向后臺系統(tǒng)上報判題系統(tǒng)運作狀態(tài)(見圖2)。當收到用戶提交信息時,判題系統(tǒng)應進展數(shù)據(jù)交互,使后臺效勞端處理判題懇求(見圖3)。

圖2判題系統(tǒng)活動圖

圖3后臺處理判題懇求活動圖

1.2.2后臺效勞模塊設計

后臺系統(tǒng)是實現(xiàn)前端頁面操作和系統(tǒng)功能的重要模塊,本系統(tǒng)將后臺系統(tǒng)分為七個模塊,以下主要介紹四個功能模塊的設計。

⑴競賽模塊:當收到判題結(jié)果信息后,系統(tǒng)會對競賽信息進展相關更新(見圖4)。治理員和教師能在后臺添加新競賽,并且可以設置競賽顯示時間、開頭時間、完畢時間、競賽總時長等。治理員和教師也能對自己權限范圍內(nèi)的競賽進展修改,進展用戶治理。設置測試賬號后可以進展競賽測試。設立排行榜,對競賽成績根據(jù)編程競賽規(guī)章排名??梢詫η芭_采集的用戶數(shù)據(jù)進展儲存、分析、IP上報,防止用戶作弊。供應競賽參加功能,用戶在競賽過程中可以直接參加開放型競賽,對于私人競賽可以通過房間ID和密鑰參加。對于競賽數(shù)據(jù)如用戶答題狀況、用戶提交狀況、用戶競賽IP數(shù)據(jù)、排行榜,可以進展查閱和導出,同時競賽的提交數(shù)據(jù)也可以進展重新判題。

圖4后臺系統(tǒng)處理判題結(jié)果活動圖

⑵練習模塊:用戶可以查閱系統(tǒng)中公共類型的問題內(nèi)容,并按答題狀況差異化展現(xiàn)。設立排行榜,對用戶按已解決問題數(shù)進展排名。

⑶問題模塊:治理員或教師能添加新的問題,也對自己權限范圍的問題信息進展修改、刪除,還可以添加或刪除測試數(shù)據(jù)。

⑷爭論模塊:治理員可以在系統(tǒng)設置中開啟爭論區(qū),用戶能在爭論區(qū)中發(fā)起爭論,可以和其他用戶進展評論互動。

1.3安全性設計

本判題系統(tǒng)數(shù)據(jù)儲存使用MySQL。判題系統(tǒng)模塊與后臺效勞模塊分別,模塊間通信擯棄現(xiàn)有OJ系統(tǒng)普遍采納的直接讀取數(shù)據(jù)庫的方案,使用RabbitMQ消息隊列實現(xiàn)通信以提高安全性。標準數(shù)據(jù)庫編碼設計,防止攻擊者通過sql注入對后臺數(shù)據(jù)庫的數(shù)據(jù)進展讀取、刪除、篡改。

本系統(tǒng)采納SpringBoot自帶的定時器定時調(diào)用MySQL自帶的mysqldump命令來實現(xiàn)數(shù)據(jù)庫導出到文件,然后通過SMTP郵件發(fā)送效勞,將數(shù)據(jù)庫備份文件打包發(fā)送給系統(tǒng)預置的治理員郵箱,實現(xiàn)數(shù)據(jù)庫備份操作。設計時引入Docker,將判題效勞封裝成容器,一方面實現(xiàn)簡易部署,另一方面Docker容器相較于直接在宿主機運行擁有更好的安全性。

1.4UI設計

前端頁面基于VuexyAdminTemplate模板開發(fā),界面根底幫助色為灰黑紫,簡潔大方。頁面設計中,為用戶每一類型的操作供應明確的反應,同時也設計了對話框以及錯誤提示。輸入框采納簡潔的描述文字,并使用左對齊,以符合閱讀視線規(guī)律,選擇恰當?shù)奈淖诸伾n予用戶輸入反應,對于錯誤輸入賜予紅色提示,對于正確輸入無提示或者賜予綠色提示,對于危急輸入賜予黃色提示。致力于設計一款用戶友好型操作界面。

用戶界面設計為左右布局,左邊用于欄目導航,右邊用于欄目內(nèi)容的展現(xiàn),便捷高效的同時讓頁面看起來更加活潑(見圖5)。

圖5頁面布局概覽

引入插件apexcharts進展對局部場景數(shù)據(jù)的圖形繪制,用更加直觀的數(shù)據(jù)圖展現(xiàn)內(nèi)容(見圖6)。

圖6個人答題狀況扇形圖

對于表格類數(shù)據(jù)進展數(shù)據(jù)分級,不同類數(shù)據(jù)采納不同配色,直觀化展現(xiàn)各類信息,使用戶在了解信息優(yōu)先級的同時對信息有更快速更精確的定位(見圖7)。

圖7個人歷史答題狀況圖

2.1用戶權限驗證的實現(xiàn)

對于用戶權限驗證的實現(xiàn),本系統(tǒng)通過客戶端對Header(懇求頭)中的Authorization字段里攜帶的token令牌進展用戶的權限校驗,客戶端發(fā)出的全部懇求都會攜帶這個令牌,當用戶注銷,令牌就會在客戶端進展銷毀,由于token無狀態(tài)的特點,效勞器不需要保存令牌的狀態(tài),可以有效降低效勞器進展數(shù)據(jù)庫查詢的次數(shù)。在用戶登錄的時候,系統(tǒng)會依據(jù)用戶的個人信息和登錄時間生成一個具有有效時間限制的token(令牌)。

本系統(tǒng)使用filter(過濾器)和interceptor(攔截器)對局部需要權限的頁面進展授權校驗,從Header中獵取令牌,對其進展Base64Decode解碼后對authorization字段進展驗證。驗證通過后,修改Header注入用戶ID和用戶等級信息。當驗證的令牌的信息無效或者錯誤時,拒絕訪問當前懇求的頁面并返回授權錯誤信息。

2.2后臺效勞與判題效勞器通信的實現(xiàn)

本系統(tǒng)采納RabbitMQ消息隊列實現(xiàn)后臺效勞與判題效勞器之間的通信主要效勞內(nèi)容有:向判題效勞器發(fā)送判題懇求,向后臺效勞發(fā)送判題效勞器返回的判題結(jié)果,實現(xiàn)心跳機制——定時向后臺效勞端發(fā)送判題端的系統(tǒng)信息。MQ效勞器中的重發(fā)機制所帶來的因數(shù)據(jù)量過多導致內(nèi)存溢出的危急,可以通過調(diào)用ChannelAwareMessageListener接口實現(xiàn)來ack機制來消退。

2.3自動判題的實現(xiàn)

判題效勞器在接收RabbitMQ消息隊列中的判題懇求之后,將提交的代碼寫入臨時文件。依據(jù)懇求者選擇使用的語言類型,選擇不同的編譯器進展編譯并生成可執(zhí)行文件。文件生成完畢即使用題目所對應的測試用例進展測試,執(zhí)行完的結(jié)果保存至.out后綴的文件中,通過用Ptrace對進程進展跟蹤,執(zhí)行完畢刪除臨時文件,并使用題目所對應的樣本標準測試結(jié)果文件和執(zhí)行生成的文件進展比對,推斷的結(jié)果通過RabbitMQ消息隊列返回。

伴隨信息化教育的普及,OJ系統(tǒng)的應用場景也順應增加,本系統(tǒng)在保證原有功能的根底上,增加了對應教學場景的功能,對成績和代碼的導出,反作弊治理的加強。本系統(tǒng)的后期測試結(jié)果說明全部功能運行正常,也符合了預期性能要求。本系統(tǒng)正式運行后在日常教學環(huán)境中得到了良好應用,不僅能夠滿意ACM隊員的日常訓練、模擬競賽、開展競賽,也能作為教師開展相應程序類設計課程的教學幫助工具,為學校全部計算機類學生和想提高自己算法力量的學生供應了一個便捷有效的平臺。

猜你喜愛后臺頁面競賽答案動漫界·幼教365(中班)(2023年4期)2023-05-23讓Word同時擁有橫向頁和縱向頁電腦愛好者(2023年17期)2023-09-14數(shù)學潛能學問競賽中學生數(shù)理化·八年級數(shù)學人教版(2023年11期)2023-09-10WuFenghua:YuejuOperaArtist文化溝通(2023年1期)2023-01-11后臺暗戀讀者·校園版(2023年3期)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論