编写自定义服务器时,确定在任何给定时间可以连接到服务器的最大用户数的最佳实践或技术是什么?

我认为计算机硬件的能力、网络容量和服务器协议都是重要因素。

另外,您认为将网络连接数量限制为一定的最大用户数量是一个好的做法吗?或者服务器不应该限制网络连接的数量并让性能下降,直到响应时间非常长?

有帮助吗?

解决方案

Dan Kegel 总结了处理来自单个服务器的大量网络连接的技术,如下: http://www.kegel.com/c10k.html

其他提示

一般来说,现代服务器可以处理大量并发连接。我曾在具有超过 8,000 个同时打开的 TCP/IP 套接字的系统上工作过。

您将需要一个高质量的服务接口来处理这种负载,请查看 自由事件 或者 利布夫.

这是一个好问题,而且肯定是根据具体情况而定的。你的电脑是什么?您是否拥有配备四核 Xeon、128 GB RAM 和光纤通道连接的 4 插槽计算机(例如我们刚刚购买的一对 Dell R900)?或者您运行的是具有 256 MB RAM 和 56K 调制解调器的 p3 550?每个连接会给您的服务器带来多少负载?什么样的回应是可以接受的?

这些是您需要回答的问题。我想找到答案的最好方法是通过负载测试。创建代码将针对服务器执行的预期(可能还有一些意外)路径的单元测试。找到一个负载测试框架,允许您模拟 10、100、1000、10000 个用户同时执行这些任务。

这将告诉您您的计算机可以支持多少个连接。

负载/单元测试场景的好处在于,您可以在单元测试中输入响应时间预期并增加负载,直到超出响应时间。如果您需要支持 X 数量的用户并提供 Y 次响应,您将能够通过负载测试来证明这一点。

高并发连接中最大的挫折之一实际上是所涉及的路由器。面向家庭用户的路由器通常有一个小的 NAT 表,从而阻止路由器实际为服务器提供连接服务。

请务必研究您的路由器/网络基础设施设置。

我认为您不应该限制服务器允许的连接数量 - 只需捕获并正确处理接受和关闭连接时可能发生的任何异常,就应该没问题。您应该将这种较低级别的编程留给底层操作系统层 - 这样您就可以更轻松地移植您的服务器等。

这实际上取决于您的操作系统。

不同的 Unix 版本将支持“无限”数量的文件句柄/套接字,其他版本则支持较高的值,例如 32768。

典型的用户限制是 8192,但通常可以设置得更高。

我认为 Windows 的限制更多,但服务器版本可能有更高的限制。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top