我有许多客户端设备打开由Windows 2008 R2服务器上运行的服务公开的套接字连接。我想知道并发客户端连接的数量是否有限制。
答案 0 :(得分:6)
根据this article,一个硬限制是(原)16,777,214。实际限制还取决于您的应用程序:例如,如果您为每个连接创建一个线程,那么实际限制来自线程数量的限制,而不是来自网络堆栈。任何进程可能具有的句柄数量也有限制,等等。
答案 1 :(得分:3)
假设您为服务器选择了合理的架构,那么限制将与内存和CPU相关。恕我直言,你永远不会达到马丁提到的硬限制:)
所以,不要担心你永远不会遇到的理论限制,恕我直言,考虑你将如何设计你的应用程序以及如何测试它以确定你可以的当前最大客户端连接数在给定硬件上维护您的应用程序。对我来说重要的是从第0天开始执行你的性能测试(参见here的博客文章,我将对此进行解释)。现代操作系统和硬件允许您构建非常可扩展的系统,但简单的日常编码和设计错误可以轻易地浪费可扩展性,因此您必须始终执行perf测试,以便您知道何时构建路障性能。在项目结束时,你根本无法回过头来解决这些错误。
另外,我在具有低规格VM的Windows 2003 Server上运行了一些测试,并且基于基于重叠I / O(I / O完成端口)的设计,通过简单的服务器轻松实现了70,000多个并发和活动连接。有关详细信息,请参阅this answer。
我个人的方法是使用您决定使用的任何技术快速组合服务器的shell(我赞成使用I / O完成端口和最小线程的非托管C ++),有关详细信息,请参阅this blog posting。然后构建一个客户端或一系列客户端,可以在应用程序压力测试时继续更新并运行测试客户端,同时实现服务器逻辑。随着您向服务器添加更多复杂性,您可能会看到最大并发客户端的曲线逐渐下降;可伸缩性的大幅下降应该会导致您检查最新的检查以查找不幸的设计决策。