基於 C++ 11 實現的 Web 服務器

本人蔘照《Linux多線程服務端編程》,以及模仿該書使用的muduo,寫了一個輕量的 Web 服務器

源碼

Github。代碼中有比較詳細的註釋,可作爲看《Linux多線程服務端編程》得輔助材料。

已完成

  • 完成基本的Tcp(被動連接)庫;
  • 簡易的HTTP服務器,可訪問主頁HTML和網站favicon圖標。

技術

  • 主從 reactor 模式:

    • 主 reactor 負責監聽連接,當有新的連接,accept 到新的 socket 後,使用 Round Robin 方法選擇從 reactor,將 socket 派發給從 reactor;
    • 從 reactor 負責管理時間描述符(timerfd用於定時任務)、事件描述符(eventfd 用於喚醒 IO 線程)和 派發過來的 socket 文件描述符。
  • multiple reactors + thread pool (one loop per thread + threadpool);
  • EventLoop:使用 Epoll 水平觸發的 IO 多路複用技術,非阻塞 IO;
  • 線程池:

    • 使用多線程能發揮多核的優勢;
    • 線程池可以避免線程的頻繁地創建和銷燬的開銷。
  • 簡單的日誌系統;
  • 使用智能指針等 RAII 機制,來爲降低內存泄漏的可能性;

併發模型

併發模型爲 multiple reactors + thread pool (one loop per thread + threadpool); + 非阻塞 IO,新連接使用 Round Robin 策略派發。

併發模型

壓測

壓測結果

參考

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