【发布时间】:2012-07-02 11:55:04
【问题描述】:
我正在处理一个 TCP 服务器项目。 它异步监听指定端口的连接,接受新连接并开始等待来自它们的数据。 每个新客户端在连接时都会发送它的 ID,这样我就知道哪个套接字属于哪个客户端。
最少 100000 个客户端将同时连接到服务器。
问题是我应该如何存储这些客户端?
class Client
{
public Socket Socket { get; set; }
public int ID { get; set; }
}
List<Client> 之类的东西肯定会中断,因为List<T> 不是线程安全类型。我应该在客户端连接到服务器时将其添加到列表中,当连接丢失时将其从列表中删除。例如,我还需要能够向 ID 为 5 的客户端发送消息,并且在异步环境中迭代 List<T> 是一个糟糕的主意。我认为每次我需要与集合交互时锁定同步根对性能没有任何好处。
那么,我应该使用什么来提高性能?
编辑:我使用 .NET 4
【问题讨论】:
标签: c# sockets collections asynchronous asyncsocket