异步服务器套接字的正确积压是什么?

时间:2010-05-08 04:46:31

标签: c# network-programming

如果您正在使用C#中的异步服务器套接字,那么放在套接字上的正确积压是什么?例如:

server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPEndPoint iep = new IPEndPoint(IPAddress.Any, port);
server.Bind(iep);
server.Listen(10);

1 个答案:

答案 0 :(得分:3)

在大多数应用程序中,监听器本身可能不是瓶颈。更常见的情况是,您需要通过某种工作来响应这些TCP请求,并且您的应用程序一次可以有效使用的工作量将小于理论上可以维持的连接数。

这可能解释了Alex Martelli在评论中的“经验法则”:

  

我总是倾向于使用5,但我对为什么没有明确的解释。

在四核服务器上,如果客户启动CPU密集型任务,这是有意义的; 4个工作人员/线程/核心的4个连接,以及一个在负载很重的情况下保持服务响应的连接。

但是,如果您的工作不是CPU密集型,那么上述限制/解释与您无关,您可能能够管理10或50个连接,或者您可能需要使用某些机器专用资源并且只允许一个。我基本同意Hans,因为没有硬性和快速的“正确答案”,你需要查看你的应用程序做了什么,估计你认为它可以实际处理的连接数,并通过测试调整它以获得最大效率。