推薦!適合C++服務器編程初學者的基礎開源項目

剛入門C++網絡編程時,咱們都會學習一些基礎API或者書上的回射服務器、聊天室、簡單HTTP服務器實現。html

學完上述基礎後,大部分小夥伴都摩拳擦掌想作一個像樣項目,但看來看去也不知道該怎麼入手,或者不知道一個像樣項目的框架是什麼。git

我建議剛開始不要上來就鑽網絡框架,也不適合入手成熟複雜的項目,最好是找一些基礎開源項目,根據本身的想法在其基礎上添磚加瓦或者從新寫一遍,有了這些基礎後,再談精進。github

其實,對於初學者來講,最難的就是找到一個容易入門的,基礎的後臺開發項目面試

這時候,不少人都會推薦推薦陳碩大佬的書和木鐸,我也推薦。數據庫

但我建議,在讀陳大佬的書以前,能夠先看一下游雙的Linux高性能服務器編程,將書上的代碼和例程跑一遍,再去看muduo,確定會更有收穫。編程

C++後臺開發,通常的是指服務器端開發,涉及的模型有C/S模型和B/S模型。其中C/S模型更多的是關注TCP協議,服務器端和客戶端都須要本身完成,數據包也須要本身設計;B/S模型更多的關注HTTP協議,由於以瀏覽器充當客戶端,而且有現成的HTTP協議,因此重點在服務器端。設計模式

咱們看大多數書上的講解目錄,都是先講C/S模型,再講B/S模型。相對於入門來講,書上的回射服務器和聊天室程序更容易入門和理解,但要想作一個拿得出手的C/S模型項目,我的以爲仍是不容易的。瀏覽器

從面試作項目的角度,我我的更傾向先從簡易的B/S模型入手,而後再過渡到簡易的C/S模型。這樣咱們能夠跳過客戶端和數據包的設計,將更多重點放在服務器端,儘快完成一個小demo,提高初學者的信心。服務器

在這裏我將去年面試秋招時候我所準備的項目分享給你們,但願對剛入門的小夥伴有所幫助,這個項目目前還在更新和維護。網絡

項目連接:https://github.com/qinguoyi/T...

項目簡介

去年秋招的時候,讀完遊雙的高性能Linux服務器編程後,我根據書上的代碼攢了一個Linux下C++輕量級Web服務器的項目,在原來的基礎上實現了簡單註冊和登陸等簡單前臺交互和後臺訪問功能,經壓力測試能夠實現上萬的併發鏈接。(測試機器爲Intel i7 7700,16G內存)。

Linux下C++輕量級Web服務器雖然是toy級別的項目,但只要你按照README中的步驟運行,經多個同窗測試,一次就能夠跑通,這將極大加強初學者作項目的信心。

  • 註冊演示

  • 登陸演示

通過各位小夥伴的反饋,一旦請求服務器文件較大文件時,會出現問題,不是文件顯示不全,就是沒法顯示。我分析定位到了問題後,作了初步修正,並實現了Demo。等代碼測試完成後,我會將其同步到Github

目前對該Bug初步修正後,我在Ubuntu下的Chrome瀏覽器進行了大文件測試,請求服務器上的大圖(6M)和視頻(493k),效果以下。

  • 視頻測試

  • 大圖測試

測試結果

Webbench對服務器進行壓力測試,能夠實現上萬的併發鏈接.

  • 併發鏈接總數:10500
  • 訪問服務器時間:5s
  • 每秒鐘響應請求數:552852 pages/min
  • 每秒鐘傳輸數據量:1031990 bytes/sec
  • 全部訪問均成功

框架

總體的框架就是下面這樣子,模塊聯繫比較簡單,耦合性也不高,很是簡陋,只求能看懂就好。

項目中所涉及的模塊和知識點,我進行了整理,羅列在下面,每一個模塊都有對應知識的理解和運用。

  • 線程池

    • 涉及線程,鎖機制。使用一個工做隊列徹底解除了主線程和工做線程的耦合關係:主線程往工做隊列中插入任務,工做線程經過競爭來取得任務並執行它。
  • HTTP請求與響應

    • 涉及Linux系統編程,網絡編程,TCP和HTTP協議。根據狀態轉移,經過主從狀態機封裝了http鏈接類。其中,主狀態機在內部調用從狀態機,從狀態機將處理狀態和數據傳給主狀態機。
  • 註冊登陸

    • 涉及少量網頁html知識。實現用戶名和密碼校驗,另外經過html文件設置action實現跳轉。
  • 定時器

    • 涉及Linux系統信號及數據結構的使用。因爲非活躍鏈接佔用了鏈接資源,嚴重影響服務器的性能,經過實現一個服務器定時器,處理這種非活躍鏈接,釋放鏈接資源。
  • 數據庫鏈接池

    • 涉及MySQL數據庫。創建數據庫鏈接池,經過重複使用這些已經創建的數據庫鏈接,解決頻繁創建鏈接的缺點,從而提升系統性能。
  • 同步/異步日誌系統

    • 涉及設計模式,自定義阻塞隊列。同步/異步日誌系統主要涉及了兩個模塊,一個是日誌模塊,一個是阻塞隊列模塊,其中加入阻塞隊列模塊主要是解決異步寫入日誌作準備。
  • 壓力測試

    • 閱讀Webbench源碼,對進程加深理解。經過Webbench建立多個進程,每一個進程經過HTTP鏈接訪問服務器,完成壓力測試。

再次強調,代碼大部是書上的,我只是整理成一個較爲完善的項目,並加了一些功能,對全部作了一些註釋和講解。

若是對上面的項目模塊原理有疑問,你們優先查閱遊雙的Linux高性能服務器編程,還有些模糊的話,歡迎來我公號查看系列講解,最後實在搞不清楚,就直接騷擾我吧。

若是你對這個項目感興趣,或者在學習項目過程有什麼疑問,查看個人我的介紹能夠直接聯繫我

感謝你能看到這裏。

相關文章
相關標籤/搜索