有一個我正在開發的TCP服務器項目。 它異步偵聽指定的端口進行連接,接受新的連接並開始等待來自它們的數據。 每個新客戶端在連接時發送其ID,這樣我就知道哪個套接字屬於哪個客戶端。在TCP服務器應用程序中進行異步訪問的集合類
最少100000個客戶端將同時連接到服務器。
問題是我該如何存儲這些客戶端?
class Client
{
public Socket Socket { get; set; }
public int ID { get; set; }
}
喜歡的東西List<Client>
因爲List<T>
鐵定突破是不是線程安全的類型。當連接到服務器時,我應該將客戶端添加到列表中,並在連接丟失時將其從列表中刪除。我還需要能夠向ID爲5的客戶端發送消息,並且在異步環境中迭代List<T>
是一個糟糕的主意。每當我需要與集合進行交互時,我認爲鎖定同步根在性能方面不會有任何好處。
那麼,我應該使用什麼性能?
編輯:我使用.NET 4
這是線程安全的嗎? –
是的,你可以看到鏈接http://msdn.microsoft.com/en-us/library/xfhwa508.aspx – Waqar
只要記住當你迭代通過集合,並在那個時候添加或刪除了一些東西,然後將引發異常該集合已被修改。 – Waqar