簡體   English   中英

如何隨時使用帶有並發連接的c#編寫TCP Server

[英]How to write a TCP Server, using c# with concurrent connections at any time

我們在該國擁有超過50,000輛車的車隊,我們將使用固定在車輛中的gps設備(而非移動設備)來跟蹤我們的車輛,tcp服務器會通過指定IP地址和端口來接收該位置服務器。

主要要求之一是並發連接,每輛車每分鍾都會更新其位置,因此編寫過基於50,000輛車的TCP服務器的經驗豐富的人可以告訴我隨時可以接收多少個並發連接(只是一個想法) 。 我如何測試它,我的意思是如何對我的tcp服務器進行負載測試。

如果您知道任何有用的.net庫,請進行指導,我從www.nsoftware.com看過IPDaemon,他們聲稱

默認情況下,每個IPDaemon實例最多可以處理1,000個並發傳入連接(通過使用MaxConnections配置設置,此數目可以增加到100,000,也可以減少到一個較低的值)。

因此,我感到困惑並感謝經驗豐富的同事的建議。

謝謝

如果您唯一需要發送的是職位和一些元數據,請使用簡單的HTTP服務器。 市場上有很多這樣的公司,而且大多數都非常有效率:管理5萬個客戶應該不是問題,這不是一個很高的數目。

我建議您不要重新發明輪子或使用任何過於復雜的東西。 一個簡單的ASP.NET MVC應用程序應該可以解決問題。

避免為每個連接保留一個線程,而應使用“ 異步編程模型” 這意味着使用像BeginConnect()BeginRead()BeginWrite()以及它們相應的EndXXX方法,而不是使用阻塞替代方法。

這樣,應用程序僅在內部使用少量線程池線程,因此可以更好地擴展。 您可能有50,000次對BeginRead()調用,但是如果此時只有10個連接實際上正在接收數據,那么最多將有10個線程處理它們(僅舉一個例子)。

我不知道它可以擴展多遠……每分鍾的更新聽起來並不特別繁瑣,但是您必須對其進行測試,以查看它是否能夠承受負載。

請參見有關如何編寫C#異步套接字服務器實例。

並發連接數絕不能高於1500(99.99%)。 除了在實際系統上進行測試外,沒有真正的方法來對其進行負載測試。 這是一個數學問題,您可以這樣解決。

您有50000輛汽車每60秒發送一次信號,持續1秒(可能更少,這將導致更少的並發連接)。 由於信號的發送是不同步的(我想是汽車在同一時間都發送信號),所以它們或多或少地排列成這樣,這樣您每秒將獲得833個連接,即50k / 60。 現在,讓我們假設您“不幸”,同時打開了2000輛汽車(或相隔60秒),然后在打開這些汽車時將獲得2000個並發連接,這極不可能。 正如我說的那樣,您可以將1500個並發連接作為最大連接數,但要真正節省下來,請將其增加到3000或4000,這是永遠不會發生的。

所有這些都考慮到計算機將花費1秒來解析一個信號,實際上這一次應該接近0.1秒甚至更低,這將導致並發連接減少10倍,因此我對絕對最大並發連接的真實猜測約為500

如果不是.Net的硬性要求,建議您使用NodeJs。它非常輕巧,並且已經相當成熟。

正如Falanwe所說,每分鍾50.000個連接並不是很多,如果僅僅是它們正在發送的位置數據。 這基本上受帶寬限制。 計算機上沒有太多服務。

我認為您最大的挑戰不是與GPS跟蹤器的TCP連接,而是數據庫處理。 保存所有位置數據1年后,您將擁有的數據量很大。 數據庫服務器的性能將非常重要。

另外:您將如何管理,以及如何對收集到的數據進行處理? 您將需要創建智能通知和數據過濾器,以提取管理車隊所需的數據。

我在設置GPS跟蹤服務器和管理車隊方面有很多經驗。 如果您有任何疑問,請隨時與我聯系。

暫無
暫無

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

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