有一个我正在开发的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