2012-07-02 19 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

相关问题