教程是學生時代初學C++的歷程,工作後已無精力寫完剩下部分,回顧當年的程式碼有許多不完美甚至瑕疵,有意願者可以自由修改、開發、續寫該專案。 更完美的C語言基礎函式庫請移步wheelib
先說結論:不管使用什麼語言,一切後台開發的根基,是針對Linux的C/C++伺服器開發。
幾乎所有高並發伺服器都是運行在Linux環境的,筆者之前也用Java、node寫過伺服器,但最後發現只是學會了一門技術、一門語言,而不了解底層的基礎原理。一個HTTP請求的過程,為什麼可以實現高並發,如何控制TCP連接,如何處理好資料傳輸的邏輯等等,這些只有面向C/C++程式設計才能深入了解。
本教學模仿《30天自製作業系統》,針對零經驗的新手,教你在30天內入門Linux伺服器開發。本教學更偏向實踐,將會把重點放在如何寫程式碼上,而不會花太多的篇幅講解背後的電腦基礎原理,涉及到的地方會給出相應書籍的具體章節,但這並不代表這些理論知識不重要,事實上理論基礎相當重要,沒有理論的支撐,建構出一個高效能伺服器是無稽之談。
本教學希望讀者:
學完本教學後,你將會很輕鬆地看懂muduo源碼。
C/C++學習的一個困難在於初學時無法做出實際上的東西,沒有回饋,程式都在黑乎乎的命令列裡運行,不像web開發,可以隨時看到自己學習的成果。本教學的程式碼都放在code資料夾裡,每一天學習後都可以得到一個可以編譯和運行的伺服器,不斷迭代開發。
在code資料夾裡有每一天的程式碼資料夾,進入該資料夾,使用make
指令編譯,會產生兩個可執行文件,輸入指令./server
就能看到今天的學習成果!然後新建一個Terminal,然後輸入./client
運行客戶端,與伺服器互動。
day01-從一個最簡單的socket開始
day02-不要放過任何一個錯誤
day03-高併發還得用epoll
day04-來看看我們的第一個類
day05-epoll高級用法-Channel登場
day06-伺服器與事件驅動核心類別登場
day07-為我們的伺服器新增一個Acceptor
day08-一切皆是類,連TCP連線也不例外
day09-緩衝區-大作用
day10-加入執行緒池到伺服器
day11-完善線程池,加入一個簡單的測試程序
day12-將伺服器改寫為主從Reactor多執行緒模式
day13-C++工程化、程式碼分析、效能最佳化
day14-支援業務邏輯自訂、完善Connection類
day15-macOS支援、完善業務邏輯自訂
day16-重構伺服器、使用智慧指針
定時器
日誌系統
HTTP協定支援
webbench測試
文件下載斷點續傳
靜態資源存儲
.....
Wlgls/30daysCppWebServer計畫嘗試續寫了後續部分,可供學習參考
能力一般、程度有限,如果發現我的教學有不正確或值得改進的地方,歡迎提issue或直接PR。
歡迎大家為本專案貢獻自己的程式碼,如果有你覺得更好的程式碼,請提issue或直接PR,所有建議都會被考慮。
貢獻程式碼請到pine項目,這是本教學開發的網頁庫,也是最新的程式碼版本。