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