2013-06-25 87 views
1

是否可以配置IIS,使其可以處理多個HTTP請求,並以HTTP流水線模式並行地到達同一個TCP套接字?IIS和HTTP流水線,並行處理請求

我們遇到了一個問題,一個Web客戶端在一個TCP套接字中使用HTTP流水線完成多個請求。客戶端基本上發送一次10個請求,然後服務器發送10個響應(與請求的順序相同)。我們的服務器需要相當長的時間處理每個請求,主要是等待外部IO。如果IIS可以開始並行處理所有10個請求,然後將響應以正確的順序序列化回客戶端,那麼效率會更高。顯然,服務器需要某種方式來緩存響應,例如,響應3早於響應2可用。

這是可能的嗎?也許這在IIS中是不可能的,或者我只是在搜索錯誤的關鍵字......我們在Windows Server 2008 R2上運行IIS 7.5和ASP.NET 4.5。

回答

3

我們在IIS 7.5中發現了同樣的問題。

我們的解決方案是啓用「網絡花園」......它真的非常適用!只是你不能擁有一個基於「會話」的網站。所以如果你有客戶「登錄」,你將不得不重新配置這個過程。 (我們使用cookies來存儲加密的令牌 - 無論如何,除了這點之外)。

轉到:

  1. Internet信息服務>應用程序池
  2. 選擇池正在使用的(你應該有每個站點池)
  3. 點擊高級設置...
  4. 查找「最大工人進程「,並啓動那個吸盤!

您推送到現在爲止的進程數量完全取決於您的系統具有多少RAM。你當然可以監視和控制你的自我。

啓用「Web Garden」後,您會注意到(使用Process Explorer或類似工具),IIS將爲每個請求產生一個新的w3wp.exe實例,達到您指定的最大數量。新的請求僅由下一個可用的工作進程處理,從而實現真正的IIS並行請求處理。如果兩個請求彼此瞬間進入,並且請求2在請求1之前完成,那麼請求2將發送它的響應。

+0

我懷疑Web Garden模式與HTTP流水線有什麼關係。也許它允許你在應用程序中解決交叉請求阻止錯誤。 – usr

2

This is an impressive illustration of the IIS fail.

正如你可以看到,而所有用戶都在網上請求只是被添加到隊列,並建立和(綠色) - 只有1單請求被執行(藍色)。

這並沒有真正回答這個問題 - 但它是對這種災難性情況的一個美麗的例證。

2

IIS使用HTTP server api(使用HTTP。SYS);所以我做了一個簡單的測試 -

我發現,如果我上兩次打電話HttpReceiveHttpRequest服務器(不發送第一個請求的響應),它不接收第二個請求(基本上,第二個呼叫塊)。這適用於PUTGET請求。

看來,HTTP.sys實際上是在單個連接上將請求序列化到IIS;我找不到任何可能會修改此行爲的configuration on HTTP.sys