MVC架構 主程式 API 高登Model 快取Model 評分Model
MVC架構
本程式是基於 Mix framework 編寫的,採取了Model-View-Controller(MVC)的架構,方便日後維護或增加功能。
主程式 index.php (Controller)
所有操作都是透過此主程式進行,由主題列表到瀏覽主題等等,目的是想統一所有查詢,由於一般伺服器都以index.php為首頁,可以縮短網址的長度,方便手機用戶。另外,把所有查詢統一至index.php亦有助所有鏡像站長重寫連結,方便進行SEO。
程式的運作流程如下︰
任何頁面查詢一開始,程式會選取適合的伺服器以擷取內容,如果快取裏存有適合的伺服器列表就從快取的列表中選取伺服器,否則就開啟背景線程來取得伺服器列表並寫入快取當中,是次連線就以伺服器4來操作。
瀏覽主題列表時,程式會先取得主題列表,如果快取中的主題列表未過期(預設3秒為期限),就以快取的主題列表進行操作,否則就從選取了的伺服器擷取資料。從伺服器得到資料後,程式會先把資料寫進快取,以加快下一次查詢的速度。隨後,程式會利用遠程API(連至高登+中央伺服器)取得主題的評分,根據此評分把主題重新排名,此為08.12.23.15.1新增的功能之一。完成後,就會使用模版將內容輸出至客戶端,程式亦告終結。
瀏覽特定主題時,程式運作與瀏覽主題列表相似。不同的是,此查詢會觸發背景線程,此線程有兩個工作,一是把一段時間內沒人瀏覽的快取壓縮,一是把一段更長時間內沒人瀏覽的快取刪除。設計此程序的概念是來自iHKG站長的經驗,iHKG比高登+先有快取技術,可是快取使用的容量增長速度十分之快,一星期就已經有500MB,當超出站長使用的寄存容量,快取功能就不能運作了。所以,為了避免出現此情況,高登+使了背景線程的技術,把多餘的快取清除,同時用家瀏覽亦不會受背景線程影響(因為只在背景執行)。
API api.php
此為高登+中央伺服器的API程式,一般高登+鏡像網站並不會使用此程式來提供資訊。由於08.12.23.15.1的高登+新增了兩項新功能,主題評分及封鎖會員,鏡像網站及其他開發人員可以透過此API程式從中央伺服器獲得資訊以定制自己的功能。雖然如此,高登+繼續奉行開源的政策,把此API程式公開。
Model HKGolden.php
此Model封裝了所有與高登有關的功能,包括擷取主題列表、發表主題等等,開發者都可以此Model開發自己的高登程式,高登RSS便是另一套利用此Model開發的程式。由於高登討論區使用ASP.NET為開發平台,大部份連接都是stateful的,此Model的核心概念就是使用PHP socket的功能進行stateful連接以模擬一般瀏覽器的行為。流程以擷取主題列表為例,Model會先向高登伺服器發出請求,獲得ASP.NET的session資料後就再以此資料發出第二個請求以獲取主題列表。獲取了主題列表後便要開始進行解析工作,此部份使用了Regular expression,把有用的資料都拿取出來。最後的工作就是把這些資料利用stdClass的型式記存著,並返回一組載有主題stdClass的數組,工作便告完成。
Model cache.php
快取是08.12.23.15.1新增的功能,概念來自iHKG,主要是把從高登伺服器擷取的資料serialize好之後寫進檔案之中,下次就可以從快取中取出資料,不需再從高登伺服器取得資料,有助加快處理速度。高登+的cache系統是一個獨立於高登Model的系統,這有別於iHKG的系統。另外,此快取系統亦提供了兩個功能處理舊快取檔案,分別是壓縮和移除舊快取。壓縮功能使用了PHP內置的gz library,可以將一般文字檔壓縮至約10倍,經壓縮後的快取檔只有約4K左右,這有助用於各種小容量的寄存服務。另外,每隔一段時間,高登+就會把舊快取檔案移除,確保伺服器有足夠的容量來使用快取功能。
Model postComment.php, memberComment.php
這兩個model是繼承了mixModel,負責操作資料庫中的資料表,主要用在中央伺服器,一般鏡像網站不會使用。