通訊端效能技術範例
更新:2007 年 11 月
這個範例會示範如何使用 System.Net.Sockets.Socket 類別內的增強功能,建置 (Build) 會使用非同步網路 I/O 以達到最高效能的伺服器應用程式。
如需使用這些範例的詳細資訊,請參閱下列主題:
若要使用命令提示字元建置範例
開啟 [命令提示字元] 視窗,巡覽至 AsyncSocketServer 目錄下的 CS 子目錄。如需必要設定和 SDK 命令提示字元的詳細資訊,請參閱 HOW TO:設定範例設定。
在命令列中輸入 msbuild AsyncSocketServer.sln。這個命令將會建置 AsyncSocketServer 和 AsyncSocketClient 應用程式。
若要使用 Visual Studio 建置範例
開啟 [Windows 檔案總管],並巡覽至 AsyncSocketServer 目錄的 CS 子目錄。
按兩下 AsyncSocketServer.sln 的圖示,即可在 Visual Studio 中開啟該檔案。
在 [建置] 功能表中,選取 [建置方案]。
AsyncSocketServer 和 AsyncSocketClient 應用程式都會建置在預設的 \bin 或 \bin\Debug 目錄中。
若要執行範例
使用 [命令提示字元] 視窗巡覽至新建立之可執行檔的所在目錄。
在命令列中輸入 AsyncSocketServer.exe 和適當的命令列引數,即可執行 AsyncSocketServer 應用程式。
在命令列中輸入 AsyncSocketClient.exe 和適當的命令列引數,即可執行用於測試 AsyncSocketServer 應用程式的 AsyncSocketClient 應用程式。
需求
這個範例需要 .NET Framework v3.5、3.0 SP1 或 2.0 SP1。
示範
可提供由特定高效能通訊端應用程式使用的另一種非同步模式的 System.Net.Sockets.Socket 類別中,已加入一系列新類別來做為增強功能集合的一部分。這些增強功能是特別針對需要高效能的網路伺服器應用程式所設計。應用程式可以獨佔地使用增強的非同步模式,或僅在其應用程式的目標區域中使用 (例如,在接收大量資料時)。
AsyncSocketServer 範例示範如何藉由實作 Echo Server,在 System.Net.Sockets.Socket 類別上使用這些新方法。伺服器會將所有讀取自用戶端的資料傳回用戶端。實作於這個範例中的 Echo Server 可同時處理多個用戶端 (由命令列引數指定能處理的最大數量),並且反白顯示事件架構之非同步通訊端方法中的某些重要項目。AsyncSocketServer 範例會示範建立可重複使用資料緩衝區的集區,以及將 System.Net.Sockets.SocketAsyncEventArgs 內容物件建立成為可提升伺服器效能的方法。
AsyncSocketClient 範例是用於測試 AsyncSocketServer 範例應用程式的簡單用戶端應用程式。AsyncSocketClient 範例應用程式沒有使用 System.Net.Sockets.Socket 類別內的任何新增強功能。
AsyncSocketServer 應用程式需要 4 個命令列參數。
AsyncSocketServer.exe <numConnections> <receiveSize > <addressFamily> <localPortNum>
參數如下:
numConnections - 伺服器可同時接受的最大連線數。
receiveSize - 由伺服器在執行每個接收作業時所使用的緩衝區大小 (以位元組為單位)。
addressFamily - 通訊端的通訊協定家族 (Family),伺服器將會用它來接聽連入連線。支援的值為 ipv4 和 ipv6。
localPortNum - 伺服器將會與其繫結的本機連接埠。
下列使用方式範例允許在每個接收作業 (緩衝區大小為 1024 位元組的 IPv4 上) 存在 500 個連線,並在連接埠 8000 上接聽:
AsyncSocketServer.exe 500 1024 ipv4 8000
AsyncSocketClient 應用程式需要 2 個命令列參數。
AsyncSocketClient.exe <destIPAddress> <destPortNum>
參數如下:
destIpaddress - AsyncSocketServer 將與其連線的目的端 IP 位址。
destPortNum - AsyncSocketServer 的目的端通訊埠編號。
請參閱
參考
System.Net.Sockets.SendPacketsElement