在線OJ項目

需求:實現一個在線判題系統,用戶經過瀏覽器編寫和提交代碼,經過網絡傳輸,將代碼上傳到後臺,後臺對提交的代碼進行編譯運行,將編譯運行結果反饋給用戶
在線OJ先後臺的流程:
在線OJ項目git

第三方庫:httplib,json,ctemplate,boostgithub

項目分爲五大模塊:
網絡服務模塊
搭建http服務器:
本人採用的是GitHub上提供的開源的httplib.h庫,在搭建http服務的時候,只須要咱們包含該頭文件就能夠使用了
提供http服務,串聯試題模塊和編譯運行模塊
1.獲取題目列表
2.提交選中的題目
3.提交題目代碼和題目描述,代碼的編譯框
試題模塊
1.從配置文件中加載題目
a.配置文件格式:
約定配置文件當中對題目的描述
題目的編號,題目的名字,題目所在的目錄,題目難度
b.加載題目的配置文件,使用數據結構保存加載出來的題目的介紹信息
c.針對每一道題目而言,須要根據給出的路徑進行加載
2.提供獲取總體題目的接口
給網絡服務模塊提供一個能夠獲取全部題目描述的接口,展現給用戶
3.提供單個題目的接口
給網絡服務模塊獲取單個題目描述和做答的接口,展現給用戶
編譯運行模塊
1.編譯
a.將用戶提交的代碼寫到文件中
b.建立子進程,而且進行程序替換爲g++程序,進行編譯源碼文件
c.獲取編譯結果寫到標準輸出文件當中或者寫入標準錯誤文件中
2.運行
a.若是代碼走到運行階段,說明必定編譯出來可執行程序了,建立子進程,而且讓子進程進行程序替換,替換成可執行程序
b.將程序運行結果,保存到標準輸出或者標準錯誤文件中
日誌模塊
1.提供時間戳服務:爲了區分不一樣的用戶提交的代碼,當代碼寫到文件當中的時候,使用時間戳來進行一個區分
工具模塊
1.實現切割字符串的函數
2.提供寫文件操做
3.提供讀文件操做
4.提供URL解碼操做json

源碼地址:https://github.com/wake5up/My-c--code/tree/master/OJ-project瀏覽器

相關文章
相關標籤/搜索