是否有可能以这样一种方式,它可以处理并行同一个TCP套接字上到达HTTP流水线模式多个HTTP请求IIS配置?
我们已经在多个请求由web客户端在一个TCP套接字进行,使用HTTP管道问题。 客户端基本上将让我们说10个请求一次,然后服务器发送10个应答(在同一顺序的要求)。 我们的服务器需要相当长一段时间,对于每个请求,主要是等待外部IO。 这将是更有效的,如果IIS可以开始以正确的顺序上,所有并联10个请求工作,然后序列化的响应返回给客户端。 显然,服务器将需要一些方法来缓存响应,例如如果响应3比2的响应更早提供。
这有可能以某种方式? 也许这是不可能的IIS,或者说我只是在寻找的Windows Server 2008 R2上的错误的关键词...我们正在运行IIS 7.5和ASP.NET 4.5。
我们在IIS 7.5中遇到了同样的问题。
我们的解决方案是让“Web园” ...它真的效果很好! 只是,你不能有一个“会话”基于Web站点。 所以,如果您的客户端“注册”,你将不得不重新配置过程。 (我们使用cookies来存储加密令牌 - 反正除了点的)。
去:
- 互联网信息服务>应用程序池
- 使用选择池(你应该有每个站点池)
- 点击高级设置...
- 寻找“最大工作进程”和曲柄吸盘!
那你它推送到处理量现在完全取决于你的系统多少内存了。 你当然也可以监视和控制这个你自己。
着有“Web园”启用后,你会发现(使用Process Explorer或类似的东西),IIS将产生的w3wp.exe的新实例为每个请求,由您指定的最大数量。 新请求简单地得到由可用的下一个可用的工作进程处理,实现真正的IIS并行请求处理。 如果两个请求彼此的时刻内进来,并请求2被请求1之前完成,请求2是发送其响应。
IIS使用HTTP服务器的API (使用的HTTP.sys); 所以我做了一个简单的测试 -
- 写了一个HTTP服务器使用此API,
- 写了Winsock客户端打开一个连接并发送2个http请求
我观察到,如果我称为HttpReceiveHttpRequest两倍的服务器上(不发送针对第一请求的响应)时,它不接收第二请求(基本上,第二呼叫块)。 两个这样成立PUT
和GET
请求。
看来,HTTP.sys在事实上是序列化对IIS的请求在单个连接上; 我找不到任何关于HTTP.sys进行配置可能会改变这种行为。
正如你所看到的,而从所有用户的所有在网上的请求只是被添加到队列,并建立和(绿色) - 只有1单请求被执行(蓝色)。
这并没有真正回答这个问题 - 但它的这种灾难性局势的美丽插图。