我正在使用 IIS 5.1 处理在 XP 上运行的商业应用程序。应用程序定期返回 IIS 错误“此时访问该网站的人太多”。这是由于微软在 Windows XP 下人为地限制了 IIS 5.1 下的连接数(10)造成的,但在这种情况下,实际上只有一个用户(尽管一次打开几个选项卡)。Microsoft 建议您可以通过关闭该特定网站的 HTTP Keep-Alives 来减少问题:
http://support.microsoft.com/kb/262635
如果您在 Windows 2000 Professional 上使用 IIS 5.0 或在 Microsoft Windows XP Professional 上使用 IIS 5.1,请在网站的属性中禁用 HTTP keep-alives。执行此操作时,仍然存在 10 个并发连接的限制,但 IIS 不会为非活动用户维护连接。
我可以这样做;但是,我担心性能下降。但是,我也注意到 IE8 处理这个问题的方式似乎与 IE7 不同。默认情况下,IE6 和 IE7 使用 2 个持久连接,而 IE8 使用 6 个。也许在这种情况下,IE8 本身正在生成多个连接以试图更快,但是这些额外的连接会压倒 XP 上人为限制的 IIS 5.1?假设是这种情况,是否可以设置 Internet Explorer 选项、注册表设置或策略以强制 IE8 在持久连接方面表现得像 IE7?我不会为所有用户设置此设置,但对于使用此应用程序的少数用户,它可能会解决他们的间歇性问题,直到应用程序可以重新托管在 Windows Server 2008 上。谢谢。
禁用保持活动连接肯定会通过停止浏览器在上次访问后保持连接打开一段时间来减少问题。
它当然不会停止这个问题。如果您只有两个使用 IE8 的用户打开一个包含许多子对象(图像、脚本文件、css 文件)的页面,那么您将达到 10 个连接限制。根据您的应用程序和用户数量,这可能不太可能,但是您拥有的并发用户会话越多,它就越有可能转移到旨在供服务器使用的 Windows 变体(因此不会人为地自行禁用)是你应该尽快做的事情。
如果您的用户是本地用户或使用许多连接,则禁用 keep-alives 不会对性能产生重大影响。保持活动连接通过减少 TCP 握手来减少网络延迟的影响,但是如果您的客户端是本地的,则每个连接无论如何都不会花费很长时间来启动。如果您的用户相对于应用程序非常遥远,因此他们与应用程序之间存在相当大的往返延迟,那么差异会更加明显 - 100+ms 的跨大西洋往返时间会产生更大的影响与保持活动关闭的性能相比,同一网络上主机之间的<1ms往返时间。