項目五:Tinyhttpd_with_threadpool_epoll

一、項目背景/介紹

介紹要點

what:你做了什麼工作?
why:這個工作的目的是什麼?
when:這個工作發生在什麼時候?
who:由誰參與了這個工作?
where:在哪裏開展的工作?你在什麼情境下做的工作?
How:你如何做這個工作?結果怎麼樣?

爲了加深對服務器後端開發以及http協議的理解(why),在2020年4月到2020年6月兩個月時間(when),我自己在學習了Tinyhttpd源碼後在linux環境下擴展了Tinyhttpd(how)增加了基於epoll事件驅動的I/O,採用高效的線程池代替之前一個請求創建一個線程的方法進行客戶端連接任務管理,父進程創建子進程使用動態請求解析技術Cgi來支持Get與Post請求。壓力測試結果表明,可以支持高併發http請求。

主要模塊:處理連接請求模塊;接收客戶端連接模塊;線程池模塊;SocketAPI 模塊。

二、主要技術

  • epoll I/O複用技術/阻塞/非阻塞
  • 動態請求解析技術Cgi
  • Reactor模式
  • 線程池
  • Socket網絡編程相關知識
  • http報文格式
  • http請求命令get/post
  • 進程通信

三、項目遇到問題總結

- 是否有做得不足的地方,怎麼改進?

  • 可以增加定時器刪除不常用連接,若大量連接佔用服務器資源,效率變低
  • CGI是一種古老動態頁面生成方式,每個客戶端連接,就要創建子進程,高併發環境下,創建子進程開銷比較大,建議使用其他的組織方式。

- 收穫有哪些?
(1)瞭解C/S模式的基本框架與服務器與客戶端運行基本流程。
(2)瞭解了linux的多路複用I/O的epoll事件驅動方法。
(3)瞭解了線程池的使用

- 項目中最難的地方?
壓力測試的時候總是連接不穩定
線程池設計
父子進程通信

資料

服務器項目–Tinyhttpd_with_threadpool_epoll

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