在编写自定义服务器时,确定在任何给定时间可以连接到服务器的最大用户数的最佳实践或技术是什么?
我认为计算机硬件、网络容量和服务器协议的能力都是重要因素。
另外,您认为将网络连接数限制为某个最大用户数是否是一种好习惯?还是服务器不应该限制网络连接的数量,让性能下降,直到响应时间非常长?
在编写自定义服务器时,确定在任何给定时间可以连接到服务器的最大用户数的最佳实践或技术是什么?
我认为计算机硬件、网络容量和服务器协议的能力都是重要因素。
另外,您认为将网络连接数限制为某个最大用户数是否是一种好习惯?还是服务器不应该限制网络连接的数量,让性能下降,直到响应时间非常长?
Dan Kegel 汇总了处理来自单个服务器的大量网络连接的技术摘要,此处:http ://www.kegel.com/c10k.html
这是一个很好的问题,而且绝对是情境性的。你的电脑是什么?您是否有一台配备四核 Xeon、128 GB RAM 和光纤通道连接的 4 插槽机器(例如我们刚刚购买的一对戴尔 R900)?或者您是在具有 256 MB RAM 和 56K 调制解调器的 p3 550 上运行吗?每个连接在您的服务器上放置多少负载?什么样的回应是可以接受的?
这些是您需要回答的问题。我想找到答案的最好方法是通过负载测试。创建您的代码将对您的服务器执行的预期(可能还有一些意外)路径的单元测试。找到一个负载测试框架,让您可以模拟 10、100、1000、10000 个用户同时执行这些任务。
这将告诉您您的计算机可以支持多少个连接。
负载/单元测试场景的好处在于,您可以在单元测试中加入响应时间预期并增加负载,直到超出响应时间。如果您需要以 Y 秒响应支持 X 数量的用户,您将能够通过负载测试来证明它。
高并发连接的最大挫折之一实际上是所涉及的路由器。面向家庭用户的路由器通常有一个小的 NAT 表,阻止路由器实际为服务器提供连接服务。
一定要研究你的路由器/网络基础设施设置。
我认为您不应该限制服务器允许的连接数量 - 只需捕获并正确处理接受和关闭连接时可能发生的任何异常,您应该没问题。您应该将这种较低级别的编程留给底层操作系统层 - 这样您就可以更轻松地移植服务器等。
这实际上取决于您的操作系统。
不同的 Unix 风格将支持“无限”数量的文件句柄/套接字,其他的具有高值,如 32768。
典型的用户限制是 8192,但通常可以设置得更高。
我认为 windows 的限制更多,但服务器版本可能有更高的限制。