簡體   English   中英

使用c#一次接受多個tcp連接

[英]Accepting many tcp connections at one time using c#

我想接受大約5000個tcp客戶端,它們正在嘗試一次完全連接。
當我測試程序時,許多客戶端可以真正地連接但很多人不能通過給出“因為目標機器主動拒絕它而無法建立連接”錯誤。
我增加了我的socket的listen方法的backlog參數,但它沒有幫助我使用的代碼是帶有鏈接的msdn的示例。 有誰能夠幫助我?

底層堆棧可以在忙於接受其他連接時拒絕連接(內部沒有任何內容真正並行)。 如果你真的需要一次連接那么多客戶端,你可以稍微改變一下客戶端邏輯:重新連接失敗(如評論中提出的那樣)。 或者,您可以在不同端口上的不同線程上啟動多個偵聽器,並在客戶端選擇通過公平骰子連接的端口。

您可能希望研究使用SocketAsyncEventArgs對象。 然后你可以接受套接字來處理初始連接,一旦建立了連接,接受套接字就會把它交給一個worker SocketAsyncEventArgs對象。

查看此項目以開始使用它。 http://www.codeproject.com/Articles/83102/C-SocketAsyncEventArgs-High-Performance-Socket-Cod

我發現使用這種技術非常有效,但是你會遇到操作系統和硬件的限制。 我測試了我的tcp服務器(在Windows服務器2008 R2上運行),它使用SocketAsyncEventArgs對象,有幾千個連接,它成功運行,沒有客戶端被拒絕(不得不為此增加積壓)。 問題在於,建立連接的客戶端和服務器之間的時間以及客戶端獲得響應的時間隨着同時連接請求數量的增加而增長。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM