原创 唯快不破:高性能網絡服務器1--accept建立連接

最近在部門內做了個高性能網絡編程的培訓,近日整理了下PPT,欲寫成一系列文章從應用角度談談它。 編寫服務器時,許多程序員習慣於使用高層次的組件、中間件(例如OO(面向對象)層層封裝過的開源組件),相比於服務器的運行效率而言,他們更關注程

原创 唯快不破:UNIX網絡編程--非阻塞connect的實現

一、《UNIX網絡編程》-非阻塞connect 在一個TCP套接口被設置爲非阻塞之後調用connect,connect會立即返回EINPROGRESS錯誤,表示連接操作正在進行中,但是仍未完成;同時TCP的三路握手操作繼續進行;在這之後

原创 唯快不破:高性能網絡服務器3--TCP消息的接收

這篇文章將試圖說明應用程序如何接收網絡上發送過來的TCP消息流,由於篇幅所限,暫時忽略ACK報文的回覆和接收窗口的滑動。 爲了快速掌握本文所要表達的思想,我們可以帶着以下問題閱讀: 1、應用程序調用read、recv等方法時,socke

原创 唯快不破:socket 可讀 可寫 條件

一、下列四個條件中的任何一個滿足時,socket準備好讀: 1.socket接收緩衝區中已經接收的數據的字節數大於等於socket接收緩衝區低潮限度的當前值;對這樣的socket的讀操作不會阻塞,並返回一個大於0的值(即:準備好讀入的數

原创 唯快不破:TCP網絡編程--非阻塞accept和非阻塞connect

非阻塞accept 當一個已完成的連接準備好被accept的時候,select會把監聽socket標記爲可讀。因此,如果用select等待外來的連接時,應該不需要把監聽socket設置爲非阻塞模式,因爲如果select告訴我們連接已經就

原创 唯快不破:高性能網絡服務器2--TCP消息的發送

在高性能網絡編程--accept建立連接中,我們已經建立好的TCP連接,對應着操作系統分配的1個套接字。操作TCP協議發送數據時,面對的是數據流。通常調用諸如send或者write方法來發送數據到另一臺主機,那麼,調用這樣的方法時,在操

原创 唯快不破:結合內核實現源碼分析 select poll epoll區別

在博客中以前的文章有介紹epoll的使用方法,但是並沒有詳細介紹之間的區別 http://blog.csdn.net/yusiguyuan/article/details/15027821 http://blog.csdn.net/yu

原创 唯快不破:高性能網絡服務器5--IO複用與併發模型

對於服務器的併發處理能力,我們需要的是:每一毫秒服務器都能及時處理這一毫秒內收到的數百個不同TCP連接上的報文,與此同時,可能服務器上還有數以十萬計的最近幾秒沒有收發任何報文的相對不活躍連接。同時處理多個並行發生事件的連接,簡稱爲併發;

原创 唯快不破:I/O之內核buffer-“buffer cache”

"buffercache" 要理解"buffercache"這個東西,需要澄清一下概念: 一般情況下,進程在io的時候,要依賴於內核中的一個buffer模塊來和外存發生數據交換行爲。另一個角度來說,數據從應用進程自己的buffer流動

原创 唯快不破:高性能網絡服務器4---TCP連接的關閉

TCP連接的關閉有兩個方法close和shutdown,這篇文章將盡量精簡的說明它們分別做了些什麼。 爲方便閱讀,我們可以帶着以下5個問題來閱讀本文: 1、當socket被多進程或者多線程共享時,關閉連接時有何區別? 2、關連接時,若連

原创 唯快不破:linux守護進程的詳解與創建

寫在前面,守護進程與後臺進程的區別: 後臺進程:默認情況下,進程是在前臺運行的,但是在運行的時候使用特殊操作使前臺運行的程序放置後臺運行,但是如果這個進程所依附的shell終結,就是在後臺運行的程序也會被終止。 守護進程:類似於一種服務

原创 唯快不破:UNIX網絡編程--TCP網絡編程中的listen

int listen(int fd, int backlog); 有幾個概念需要在開頭澄清一下 TCP socket分兩種,監聽socket和傳輸socket兩種 監聽socket:負責處理網絡上來的連接請求(客戶端的syn包到達

原创 唯快不破:TCP/IP詳解--TCP中異常關閉連接的意義 異常關閉的情況

一、異常關閉連接的意義 終止一個連接的正常方式是發送FIN。在發送緩衝區中所有排隊數據都已發送之後才發送FIN,正常情況下沒有任何數據丟失。 但我們有時也有可能發送一個RST報文段而不是FIN來中途關閉一個連接。這稱爲異常關閉。進程關閉

原创 唯快不破:TCP/IP中的SO_REUSEADDR和SO_KEEPALIVE

SO_REUSEADDR 據《UNIX網絡編程》卷一所說,此選項用於4種用途 我本人在TCP服務器上只處理過兩種,其他情況如有需要,請參考《UNIX網絡編程》卷一 1.引自《UNIX網絡編程》卷一 多進程綁定同一對IP和PORT,按

原创 唯快不破:TCP之性能優化避免慢啓動

TCP協議中有個慢啓動,在《TCP/IP詳解卷一》中佔據的篇幅很小,但是這個東西,在某些業務場景下,對性能的影響非常大。什麼是慢啓動 最初的TCP的實現方式是,在連接建立成功後便會向網絡中發送大尺寸的數據包,假如網絡出現問題,很多這樣的