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