2012-03-09 27 views
2

我正在從ColdFusion應用程序中大量使用RESTful API。在ColdFusion中維護出站TCP連接池

我不是CF專家,但我預計重複的cfhttp調用將成爲瓶頸,因爲我相信每個都會導致連接建立,請求發送,響應接收和連接斷開。

我很好奇 - 有沒有辦法維持連接池,請求可以通過發送,以避免重複建立/拆除?

ColdFusion服務器是否提供了我不知道的設備(我們正在使用CF 8)還是可以編寫一個可以維護池的java自定義標記?

當然有人遇到過這個。

回答

0

不幸的是我認爲答案是「否」,具體是因爲您的要求。這不僅僅是REST的工作原理。限制是API方面,而不是ColdFusion問題。

假設你也控制了API的結尾,你也可以做類似的事情,但它不會是REST。

+1

你完全確定嗎?看起來如果您可以保持與後端的HTTP 1.1連接,則可以在該上下文中發出多個REST API請求。 – 2012-03-09 18:29:55

+0

http://www.w3.org/Protocols/rfc2616/rfc2616-sec8.html – 2012-03-09 18:30:43

0

我想你可能實際上可以通過使用cfhttp調用中的「Keep-Alive」請求頭來完成此操作。例如:

<cfloop from="1" to="50" index="i"> 
    <cfhttp url="http://mysite.com/getPage.cfm?i=#i#" method="get"> 
    <cfif i LT 50> 
    <CFHTTPPARAM type="HEADER" name="Connection" value="Keep-Alive"> 
    <cfelse> 
    <CFHTTPPARAM type="HEADER" name="Connection" value="close"> 
    </cfif> 
    </cfhttp> 

    <cfdump var="#cfhttp.filecontent#"> 

</cfloop> 

我沒有測試過這一點,但在理論上它應該保持到後端連接打開,而你做的每一個請求(假設後端允許這一點,並連接不是招之間的延遲不會觸發暫停)。您應確保您的API響應包含一個「Content-length」標頭,以便客戶端(您的cfhttp代碼)知道每個請求何時完成。您將希望發出一個明確的「關閉」,正如我所示,以防止不必要的打開連接到後端。

+0

這是一個有趣的想法,如果您在同一頁面上對REST資源進行多次調用,可能會有一些適用性。不知道頁面執行停止後會發生什麼,但我可以猜測。 – hapimatt 2012-03-09 20:29:13

+0

這是一個有趣的想法,如果您在同一頁面上對REST資源進行多個調用,可能會有一些適用性。不知道頁面執行停止後會發生什麼,但我可以猜測。我在考慮更多的東西,可以在服務器範圍內維護連接池,並且可以在請求中保留連接池。類似於內置的數據庫連接池。因此,在服務器範圍創建一個java對象,並通過它運行所有REST請求而不是cfhttp調用,並且java對象正在維護一個池。不知道這是否會奏效,但這就是理論...... – hapimatt 2012-03-09 21:21:23

+0

這可能是可能的,但它肯定要在Java級別完成。 – 2012-03-09 21:54:49