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