C++開源跨平臺OJ系統判題核心—— FreeJudger(一)
C++開源跨平臺OJ系統判題核心—— FreeJudger
By 馬冬亮(凝霜 Loki)
一個人的戰爭(http://blog.csdn.net/MDL13412)
專案背景
本專案是為作者所在學校搭建OJ系統時衍生出來的一個專案,由於我的學弟、學妹們對Linux系統不熟悉,為了我們這批人畢業了以後,有人能維護OJ系統,因此選用了可以執行在Windows平臺的開源OJ系統。
起初,我的一個同學用NOJ(南京航空航天大學的OJ)搭建起了我們協會最初版本的OJ,但是這套OJ系統的判題核心不開源,且安全性得不到保證,再加上其web介面實在是太難看,我的一位學長ZB選擇hustoj做為協會的新一代OJ平臺。hustoj最初被設計在Linux系統上執行,因此需要對其進行二次開發,經過驗證,此OJ的移植工作主要集中在判題程式上。至此,作者和ZB發起了FreeJudger開源專案,並希望藉由此專案,推動國內OJ的發展。
功能需求
- 崩潰自動重啟;
- 支援並行/併發評判;
- 支援多種語言的評判;
- 能至少在Windows平臺和*nix平臺執行;
- 支援安全沙箱功能(限制程式執行記憶體、執行時間、對系統的訪問/更改等),保證系統安全。
系統架構
可執行程式
分為守護程式和監控程式兩部分組成,其中守護程式是執行在後臺進行評判的核心,監控程式提供一個GUI介面供使用者獲取守護程式執行狀態,並對其進行控制(無需一直執行,可以在需要時,連線到守護程式,支援遠端訪問)。
PlatformLayer
- PlatformLayer用於遮蔽作業系統的細節,其組成及功能如下:
- logger:日誌庫,目前使用log4cxx作為核心;
- xml:配置檔案解析庫,目前使用RapidXML作為核心;
- filetool:提供對系統檔案的基本操作(建立、刪除檔案/資料夾,讀取、寫入檔案),目前使用Boost.FileSystem作為核心;
- process:提供對程式的封裝,其介面為仿Linux風格,目前各平臺採用原生系統呼叫實現;
- thread:提供POSIX相容的執行緒封裝,目前使用Boost.Thread作為核心;
- taskmanager:提供工作管理員,用於管理判題任務;
- sql:提供對資料庫的抽象,目前支援MySQL資料庫的操作;
- net:用於實現守護程式與監控程式之間的通訊;
- windowsapihook:用於遮蔽掉Windows Job在一些Windows平臺上彈出“應用程式錯誤”對話方塊的問題,使用微軟Detours庫實現。
系統軟體支援
用於支撐判題程式。
作業系統
FreeJudger要支援的作業系統平臺,至少要支援Windows和*nix。
專案組織
構建工具及IDE
- Windows平臺:VC++ 2010
- Linux平臺:Makefile + Vim
- 其他平臺:Makefile
原始碼組織
目前正在進行Windows平臺的開發,其說明如下:
- Daemon資料夾:守護程式工程;
- Test資料夾:用於臨時測試程式碼的工程;
- judgerlib資料夾:PlatformLayer層,每個模組一個工程;
- thirdpartylib資料夾:用到的第三方庫(需要編譯的,在裡面提供預先編譯好的靜態/動態庫);
- doc資料夾:專案文件;
- Debug/Release資料夾:程式輸出目錄。
二級資料夾組織如下圖所示:
專案主頁
歡迎加入
群117975329,驗證資訊CSDN。
主要維護人:
- 周寶 you_lan_hai@foxmail.com
- 馬冬亮 mdl2009@vip.qq.com
相關文章
- C++開源跨平臺OJ系統判題核心FreeJudger(二)——logger設計C++
- C++開源跨平臺OJ系統判題核心FreeJudger(三)——log4cxx同時使用多個日誌檔案C++
- 一個基於.NET Core開源、跨平臺的倉儲管理系統
- c++跨平臺開發經驗C++
- 使用c++開發跨平臺的程式C++
- 微軟開源 .NET 框架 實現跨平臺微軟框架
- 跨平臺開源通訊元件elastic communication元件AST
- 4個.Net跨平臺圖形開源庫
- 一應俱全!開源跨平臺3D應用開發框架Minko3D框架
- 微軟借力.NET開源跨平臺支援,佈局物聯網平臺開發微軟
- 開源、高效、跨平臺:深剖Google FlatBuffers工作原理Go
- 怎樣下載C/C++的免費、開源且跨平臺IDE——Code::BlocksC++IDEBloC
- MobileLab跨平臺開發專題交流會
- Apache Wayang :跨平臺資料處理系統Apache
- 跨平臺渲染引擎之路:框架與核心模組框架
- 應用跨平臺問題?
- 開源跨平臺資料格式化框架概覽框架
- 列一份跨平臺開發的讀書清單[C/C++ (or Java?)]C++Java
- 一款開源的跨平臺實時web應用框架——DotNetifyWeb框架
- 開源一個跨平臺執行的服務外掛 - TaskCore.MainFormAIORM
- .NET Core跨平臺:使用.NET Core開發一個初心源商城總括
- 一個開源的OJ二次開發
- 如何有效開發一款跨平臺遊戲遊戲
- 原生體驗擋不住!JavaScript開源跨平臺框架NativeScriptJavaScript框架
- 各種SmartPhone上的跨平臺開源框架的總結框架
- 開源面試題社群平臺上線了面試題
- 為什麼.NET一開源一跨平臺 一些人就在喊Java去死?Java
- BookStack:一個開源的維基平臺
- asp.net快速開發平臺,敏捷核心,多種管理系統一步到位ASP.NET敏捷
- C++分散式系統——《開題》C++分散式
- 跨平臺開發框架的大旗框架
- 跨平臺開發框架 Lynx 初探框架
- QT6跨平臺開發QT
- 【開源】C#跨平臺物聯網通訊框架ServerSuperIO(SSIO)C#框架Server
- 開源機器學習系統(一)機器學習
- 一個浮點數跨平臺產生的問題
- 適合於跨平臺的C++測試工具C++
- C++跨平臺庫boost和Poco的編譯C++編譯