2011-01-12 70 views
9

有人能給我們解釋一下下面的參數之間的行爲差​​異:在一個Zend_Http_Client類keep_alive和HTTP請求的持久選項有什麼區別?

KEEP_ALIVE參數?

在Zend_Http_Client_Adapter_Socket類持久

我想了解我需要做些什麼來保持打開一堆HTTPS連接(以避免SSL的關聯)。

謝謝, 加斯

+0

這聽起來像你想持久。 – Amber 2011-01-12 17:48:26

回答

0

的KeepAlive意味着連接可以在單個請求的過程中重複使用,但它會在請求的末端封閉。持久意味着連接將超越單個請求的存活 - 以便在同一個PHP進程上被後續請求使用。

+0

這不是準確的。 Keep-Alive意味着您可以使用相同的連接向相同的服務器發送多個請求(假設它使用HTTP/1.1)。但是,如果您沒有快速提出請求,則連接將被服務器關閉。 – Brad 2011-01-12 22:21:23

1

如果您使用永久連接,您應該使用保持活動狀態,因爲如果沒有保持活動HTTP 1.1連接,您的persitent將不得不做很多工作來模擬工作。

編輯:(是時候吃)

保持連接設置有關quite- 短時間內設置,由服務器設置的會談。對於Keep-Alive請求,Apache默認處理15s,但當前優化設置爲5秒。這主要是爲了幫助HTTP客戶端將js和css連接到同一個HTTP連接的頁面上。如果您可以調整服務器設置,您可以嘗試最長的Keep-Alive查詢(但要小心,這會嚴重限制服務器所支持的客戶端數量)。

持續連接模式是爲了真正模擬長期持續連接,打開的套接字在腳本結束時未關閉。你應該非常小心這種設置。你是否在CLI模式下? FCGI?如果你在apache進程中運行,我真的不確定你會在這個腳本的下一個請求上得到相同的連接(這可能會被另一個apache進程處理),如果你的代碼運行在大型部署中的幾個apache服務器。這是針對客戶端(PHP)的,但對於目標服務器來說,這也是一大痛苦。

重新編輯(如一些關於SSL必須說)

是否確實需要優化SSL negociation時間?至少在服務器端,SSL使用緩存來限制與第一個請求的關聯。 SSL會話的客戶端緩存也許可以通過函數(Zend類使用的函數)來完成,如果不是,你可以從你自己的測試一個新類(只需要實現接口)並嘗試使用curl,如curl使用默認的SSL會話緩存

+0

感謝您的輸入 – 2011-01-17 19:58:25

0

僅供參考,雖然keep-alive應該重用HTTP連接,但適配器類(至少最近1.10)不能正確處理此問題,並且不管國旗。

相關問題