新聞中心

        EEPW首頁 > 手機與無線通信 > 設計應用 > 基于Linux的Socket網絡編程的性能優化

        基于Linux的Socket網絡編程的性能優化

        作者: 時間:2009-10-20 來源:網絡 收藏

        4 SOCket的性能
        4.1 解決多路復用
        上面的運行過程僅實現了一個客戶端接人,在實際情況中,人們往往遇到多個客戶端連接服務器端的情況。由于connect(),recv(),send() 都是阻塞性函數,若資源沒有準備好,則調用該甬數的進程將進入睡眠狀態,無法處理I/O多路復用。在服務器端的serv.c中加入select()函數,它可同時監聽多個套接字,實現I/O的多路復用。
        其函數原型如下:

        本文引用地址:http://www.104case.com/article/157808.htm

        該函數監視一系列文件描述符,特別是readfds、writefds和exceptfds。如果想知道是否能從標準輸入和套接字描述符sockfd讀入數據,只要將文件描述符“0”和“sockfd”加入集合readfds中。參數numfds應等于最高文件描述符的值加1,設置該值為sockfd+ 1。因為它一定大于標準輸入的文件描述符“0”。當函數select()返回時,readfds的值修改為反映選擇的哪個文件描述符可讀。重新編譯和運行客戶端的程序后,服務器端允許多個客戶端接入,服務器端運行結果如圖6所示。

        4.2 最小化報文傳輸的延時
        通過TCP socket進行通信時,數據都被拆分成數據塊,這樣它們就可以封裝到給定連接的TCP payload(指TCP數據包中的有效負荷)中。TCP payload的大小取決于幾個因素(如最大報文長度和路徑),為了達到較好的性能,應使用盡可能多的可用數據來填充每個報文。當沒有足夠的數據來填充 payload時(也稱為最大報文段長度maximum segment size或MSS),TCP將采用Nagle算法自動將一些小緩沖區連接到一個報文段中。這樣可以通過最小化所發送的報文的數量來提高應用程序的效率,并減輕整體的網絡擁塞。
        由于這種算法對數據進行合并,試圖構成一個完整的TCP報文段,因此會引入一些延時。網絡傳輸很長時間只發送一些較小的報文,比如 telnet程序,它讓用戶可以與遠程系統進行交互,通常通過一個shell來進行,如果用戶被要求用發送報文之前輸入的字符來填充某個報文段,該方法絕對不能滿足需要。再比如HTTP協議,通常客戶機瀏覽器會產生一個小請求(一條HTTP請求消息),然后Web服務器就會返回一個更大的響應(Web頁面)。最小化傳輸延時是首要的。在這種情況中,可以提供一種解決方案,即禁用Nagle算法,可設置TCP_NODELAY socket選項TCP socket禁用Nagle算法。


        使用Samba的實驗表明,在服務器上的Samba驅動器上讀取數據時,禁用Nagle算法幾乎可以加倍提高讀性能。

        linux操作系統文章專題:linux操作系統詳解(linux不再難懂)

        p2p機相關文章:p2p原理




        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 桃源县| 金坛市| 台南市| 建德市| 新郑市| 游戏| 合江县| 香河县| 建始县| 仁化县| 宁河县| 诸城市| 宁阳县| 齐河县| 福清市| 兰西县| 榆社县| 河曲县| 仁怀市| 祁门县| 集安市| 永寿县| 綦江县| 秦皇岛市| 高清| 东明县| 墨竹工卡县| 城市| 九江市| 涞源县| 博爱县| 勐海县| 舟山市| 错那县| 延庆县| 西城区| 和顺县| 永吉县| 岱山县| 开化县| 台安县|