(1)如果主動關閉連線,如何保證對方已經收到全部資料?
(2)如果應用層有緩衝區,如何保證先傳送完緩衝區的資料,然後再斷開連線?
(3)如果主動發起連線,但是對方主動拒絕,如何定期(帶back-off地)重試?
(4)非阻塞網路程式設計該用邊沿觸發還是電平觸發?
若是電平觸發,什麼時候關注epollout事件?會不會造成busy-loop?
若是邊沿觸發,如何防止洩讀造成的飢餓?
epoll一定比poll快嗎?
(5)在非阻塞網路中,為什麼要使用應用層的傳送緩衝區?
若應用程式要傳送40kb資料,此時os的tcp緩衝區只有25kb剩餘空間,若等待os緩衝區可用,則會
阻塞當前執行緒,所以可以先將剩餘的15kb資料快取在應用層的傳送緩衝區中,等socket可寫,再立
即傳送資料。
若應用程式隨後,又有50kb資料要傳送,而此時傳送緩衝區尚有未傳送的資料,則應將50kb的資料追加
到傳送緩衝區的尾部,而不要立馬write,因為這可能會打亂資料的順序!!
(6)在非阻塞網路程式設計中,為什麼要使用應用層額接收緩衝區?
(7)在非阻塞網路程式設計中,如何設計並使用緩衝區?
一方面,能夠減少系統呼叫,一次性讀的資料越多越划算;
另一方面,希望能夠減少記憶體占用;
eg:若有1000個併發連線,每個連線一建立就分配50kb的讀緩衝區和50kb的寫緩衝區,這將占用1gb的記憶體。
(8)若使用傳送緩衝區,萬一接收方處理緩慢,資料會不會一直堆積在傳送方,造成記憶體暴漲?
如何做應用層的流控?
(9)如何設計並實現定時器?並使之與網路io共用乙個執行緒,以避免鎖?
參考:muduo網路庫使用
之前粗略看過一段時間的nginx原始碼,對基於c實現的web server有了初步的理解。現在結合muduo網路庫來學習下c 的web server。首先是muduo網路庫的安裝和環境搭建 可參見muduo網路庫是給出了很多的例子,我首先是閱讀了最簡單的echo的原始碼,然後自己編寫makefile...
muduo網路庫編譯安裝
sudo apt get install cmake sudo apt get install libboost dev tar zxf muduo 0.9.1 beta.tar.gz cd muduo build.shcentos系統使用yum install boost devel來安裝libb...
muduo網路庫Timestamp類
muduo base timestamp.cc muduo base timestamp.h muduo base copyable.h muduo base types.h 其中timestamp.cc和timestamp.h 是類的檔案。copyable.件中包括的空類是乙個標識類,表示繼承該類...