C#高性能大容量SOCKET併發(一):IOCP完成端口例子介紹(轉)

原文地址 http://blog.csdn.net/SQLDebug_Fan/article/details/17556353sql

例子主要包括SocketAsyncEventArgs通信封裝、服務端實現日誌查看、SCOKET列表、上傳、下載、遠程文件流、吞吐量協議,用於測試SocketAsyncEventArgs的性能和壓力,最大鏈接數支持65535個長鏈接,最高命令交互速度達到250MB/S(使用的是127.0.0.1的方式,至關於千兆網卡1Gb=125MB/S兩倍的吞吐量)。服務端用C#編寫,並使用log4net做爲日誌模塊;客戶端使用DELPHI編寫,和之前的DELPHI版完成端口共用一個客戶端,提供C#版的上傳客戶端。編程

 

C#版完成端口具備如下特色:服務器

 

  • 鏈接在線管理(提供在線鏈接維護,鏈接會話管理,數據接收,鏈接斷開等相關事件跟蹤);
  • 發送數據智能合併(組件會根據資源使用狀況,對多個同時發送向同一鏈接的多個消息數據進行合併寫入緩衝區;
  • 內存池管理(提供一系列的接收和發送buffer可複用池);
  • 數據讀寫封裝;
  • 通信協議封裝;

 

由不一樣的類負責實現,比MSDN的例子代碼多了很多邏輯,爲了方便你們閱讀和理解,把總體類框架設計總體以下。網絡

類結構圖併發

 

 

服務端框架

服務端是一個控制檯程序,支持分顏色顯示日誌,界面截圖以下:分佈式

客戶端oop

用於對服務端進行性能測試,實現了吞吐量測試協議,還有日誌、查看客戶端、上傳、下載、遠程文件流五個應用層協議,能夠做爲要實現其餘協議的例子參考,其中遠程文件流能夠做爲分佈式系統的底層數據交互模塊,界面截圖以下:性能

暫不提供NET的客戶端,NET的界面編程還在學習中,很是抱歉。學習

性能測試結果

支持65535個長鏈接,爲了支持65535個鏈接,須要把程序用64位進行編譯。

循環發包網絡流量能夠達到250MB/S,受限因而網卡流量,千兆網卡最大1Gb=125MB/S,爲了測試最大吞吐量,咱們須要把客戶端和服務器放在同一臺電腦上,使用127.0.0.1這個IP測試,127.0.0.1是本機回送地址(Loopback Address),即主機IP堆棧內部的IP地址,主要用於網絡軟件測試以及本地機進程間通訊,不管什麼程序,一旦使用回送地址發送數據,協議軟件當即返回,不進行任何網絡傳輸。

其中截圖以下:

按文件上傳下載對服務器進行應用層速率測試,分爲一、1六、6四、256個併發進行測試,發包大小分一、二、四、八、1六、3二、6四、12八、25六、5十二、1024KB,測試結果彙總以下,其中最高速率達到250MB/S,綜合最優發包大小爲1六、32KB,其中速率計算有可能存在誤差,由於傳到最後,併發數會變小,形成整個的速率上升,能夠做爲性能測試的參考。

 

 

DEMO下載地址:http://download.csdn.net/detail/sqldebug_fan/7467745

相關文章
相關標籤/搜索