web 服務器功能模塊設計(部分實現)

正好這段時間多,公司沒啥項目.做一個httpserver服務器玩玩,平時多練練,在項目中開發時才能更加的順手.

每個程序員都應該嘗試下寫博客
http://droidyue.com/blog/2017/01/02/why-every-programmer-should-try-to-write-blogs/

目前開源的web服務器主要有:
https://h2o.examp1e.net/

http請求庫libCURL

我推薦一個比較小衆的:
http://iunknown.iteye.com/blog/59804

1.先看完libevent.初步理解libevent的源代碼這種事件驅動的網絡框架

暫時先採用C語言版來實現,後面再完善成C++版本.

webserver模塊分析和設計
1.命令行解析功能
命令行參數主要有哪些?服務器偵聽端口,最大客戶端數量,網站的根目錄,配置文件名稱,連接超時時間扥等

2.配置文件解析(tinyxml庫使用)
配置文件爲服務器的主配置選項,相同選項,配置文件的配置將覆蓋命令行的配置.
3.日誌庫
使用glog庫,分等級將日誌輸出.

4.多客戶端支持(網絡傳輸層,負責接收連接,數據接收,數據發送)
連接的處理,請求數據的接收,響應數據的發送,客戶端請求到來的時候,主線程查看線程池中是否有空閒的工作線程,
有:分配任務,沒有:創建新的線程.此處採用libevent框架來實現.減少多餘的網絡問題.

5.http頭部分析
5.1解析http method,如GET,POST,HEAD等等
5.2 解析http的版本
5.3 解析URI,即請求資源的地址.

6.http URI的分析設計
請求主機的位置以’/‘開始,資源位置的最後一個’/'後的字符串爲實際請求的文件名.需要根據文件名來判斷請求資源的類型,對於一個以"%"開頭的字符,需要進行轉換後使用真正的值,其後面的兩個字符拼成一個字符.

7.http支持方法的分析設計
暫時僅支持GET方法,服務器對應GET方法的處理邏輯分爲:
頭部信息的組織(http response響應的頭部信息)
文件內容的發送

8.http支持CGI的分析設計(查閱http CGI的資料和使用方法)

9.http錯誤處理的分析設計
9.1用戶的請求發生錯誤
9.2服務器端發生錯誤
9.3網絡傳輸過程中發生錯誤時

類設計
多客戶端併發支持->網絡類,libevent構造網絡框架

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