HUSTOJ實現的相關想法

這兩天通過讀 HUSTOJ 的源碼,是我對OJ系統有了初步的瞭解,對整個系統的構架有了淺薄的認識。拿HUSTOJ來講,HUSTOJ的結構是典型的LAMP服務器,就是linux+APACHE+MYSQL+PHP,以及用C++/C寫的評測機核心。

HUSTOJ有兩種數據交互的模式,兩種的不同點在於,是評測機核心通過http向php傳輸數據的方式更新評測結果,還是直接連接mysql,將最新的評測結果寫入數據可中,然後再讓web端查詢mysql。兩者的想點在於,web端在獲取用戶上傳的數據後,將數據寫入數據庫,然後讓評測機去查詢mysql。


HUSTOJ下面分三大模塊:

1. core   評測機核心

2. php  前端

3. mysql   數據庫


我現在主要研究的是core的部分,下面簡述一下HUSTOJ的core的實現原理。

core也主要是分三個部分,分別是 judged、judge_client、sim,其中judged是core的入口,judged將solution(用戶在前端提交的代碼)分配給judge_client,judge_client再創建一個沙箱環境給用戶程序,接着運行用戶提交的代碼(事先編譯好了),接着運行sim模塊來檢測代碼重複度,最後更新數據庫或者通過http的方式傳遞數據給web端,最終的數據更新是在judge_client模塊裏面實現的。

簡單說一下沙箱的實現原理,judge_client通過改變進程的文件根目錄,從而使得當前進程及子進程對系統造成的影響被束縛在了一個可控的地方里面。


在此特別感謝 zhnlue 貢獻 HUSTOJ 開源項目,學習到了很多東西


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章