正好這段時間多,公司沒啥項目.做一個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構造網絡框架