2008-09-18 31 views
5

在處理移動客戶端時,在HTTP請求傳輸過程中出現多次延遲是非常普遍的。如果您正在使用prefork Apache服務頁面或服務,則即使您的應用服務器邏輯在5ms內完成,子進程也會爲單個移動客戶端服務幾秒鐘。我正在尋找支持以下內容的HTTP服務器,平衡器或代理服務器:任何HTTP代理具有顯式的,可配置的支持請求/響應緩衝和延遲連接?

  1. 請求到達代理。代理開始在RAM或磁盤中緩衝請求,包括頭文件和POST/PUT主體。代理服務器不會打開到後端服務器的連接。這可能是最重要的部分。

  2. 代理服務器停止緩衝請求時:

    • 甲尺寸已達到限制(比如,4KB),或
    • 請求已經被完全接收,標頭和主體
  3. 只是現在,在內存中有(請求的)(部分)請求,連接打開到後端,請求被中繼。

  4. 後端發送迴應。代理服務器再次立即開始緩衝(達到更大的尺寸,比如64KB)

  5. 由於代理具有足夠大的緩衝區,後端響應在毫秒級內完全存儲在代理服務器中,後端進程/線程可以自由處理更多請求。後端連接立即關閉。

  6. 代理將響應發送回移動客戶端,儘可能快或儘可能慢地響應,而不需要連接到後端綁定資源。

我相當肯定你可以用Squid做4-6,而nginx似乎支持1-3(在這方面看起來很獨特)。我的問題是:是否有任何代理服務器支持這些緩衝和不開放連接 - 直至就緒功能?也許只有一點點的Apache config-fu讓這種緩衝行爲變得微不足道?他們中的任何一個,它不像Squid這樣的恐龍,並且支持精簡的單進程異步基於事件的執行模型?

(Siderant:我會使用nginx的,但它不支持分塊POST機構,使其成爲無用的服務的東西向移動客戶端是便宜50 $手機愛分塊跟貼...嘆了口氣。)

回答

2

Fiddler ,Telerik提供的一個免費工具,至少可以幫助您查找某些內容。

具體而言,請轉至Rules | Custom Rules...,您可以在連接期間在所有點上添加任意的Javascript代碼。您可以使用sleep()調用模擬您需要的一些事情。

但我不確定此方法是否能爲您提供所需的精細緩衝控制。儘管如此,有些東西可能比沒有更好?

+0

看起來像一個非常酷的HTTP調試工具!不幸的是,我想要的是一個代理服務器,而不是HTTP監控/操作的桌面UI。 – 2008-10-01 11:25:16

0

不幸的是,我不知道現成的解決方案。在最糟糕的情況下,可以考慮自己開發它,例如使用Java NIO--不應超過一週。

4

如何使用nginx和squid(客戶端 - Squid - nginx - 後端)?當返回來自後端的數據時,Squid會將它從C-T-E轉換爲具有Content-Length設置的常規流,因此也許它可以對POST進行標準化。

+0

這看起來像沒有開發定製解決方案的唯一方式,我不知道Squid將分塊的主體轉換爲1.0請求。感謝您的領導! – 2008-10-01 11:36:22

1

魷魚2.7可以支持1-3補丁:

我測試過這個,發現它運行良好,但它只緩衝到內存,而不是磁盤(除非它交換,當然,你不想這樣),所以你需要運行它在一個爲您的工作負載進行適當配置。

對於大多數服務器和中介來說,分塊POST是一個問題。你確定你需要支持嗎?通常客戶端應該在411請求時重試請求。