2012-07-02 39 views
0

有一個我正在開發的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

回答

0

而不是List<Client>你應該使用Dictionary<int, Client>。這樣你就可以用一行代碼訪問任何id的客戶端,例如

Dictionary<int, Client> connected = new Dictionary<int, Client>(); 
Client cc = connected[5]; 
byte[] data = new byte[100]; // any data here 
cc.SendData(data); 
+0

這是線程安全的嗎? –

+0

是的,你可以看到鏈接http://msdn.microsoft.com/en-us/library/xfhwa508.aspx – Waqar

+0

只要記住當你迭代通過集合,並在那個時候添加或刪除了一些東西,然後將引發異常該集合已被修改。 – Waqar

相關問題