我正在從ColdFusion應用程序中大量使用RESTful API。在ColdFusion中維護出站TCP連接池
我不是CF專家,但我預計重複的cfhttp調用將成爲瓶頸,因爲我相信每個都會導致連接建立,請求發送,響應接收和連接斷開。
我很好奇 - 有沒有辦法維持連接池,請求可以通過發送,以避免重複建立/拆除?
ColdFusion服務器是否提供了我不知道的設備(我們正在使用CF 8)還是可以編寫一個可以維護池的java自定義標記?
當然有人遇到過這個。
我正在從ColdFusion應用程序中大量使用RESTful API。在ColdFusion中維護出站TCP連接池
我不是CF專家,但我預計重複的cfhttp調用將成爲瓶頸,因爲我相信每個都會導致連接建立,請求發送,響應接收和連接斷開。
我很好奇 - 有沒有辦法維持連接池,請求可以通過發送,以避免重複建立/拆除?
ColdFusion服務器是否提供了我不知道的設備(我們正在使用CF 8)還是可以編寫一個可以維護池的java自定義標記?
當然有人遇到過這個。
不幸的是我認爲答案是「否」,具體是因爲您的要求。這不僅僅是REST的工作原理。限制是API方面,而不是ColdFusion問題。
假設你也控制了API的結尾,你也可以做類似的事情,但它不會是REST。
我想你可能實際上可以通過使用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代碼)知道每個請求何時完成。您將希望發出一個明確的「關閉」,正如我所示,以防止不必要的打開連接到後端。
這是一個有趣的想法,如果您在同一頁面上對REST資源進行多次調用,可能會有一些適用性。不知道頁面執行停止後會發生什麼,但我可以猜測。 – hapimatt 2012-03-09 20:29:13
這是一個有趣的想法,如果您在同一頁面上對REST資源進行多個調用,可能會有一些適用性。不知道頁面執行停止後會發生什麼,但我可以猜測。我在考慮更多的東西,可以在服務器範圍內維護連接池,並且可以在請求中保留連接池。類似於內置的數據庫連接池。因此,在服務器範圍創建一個java對象,並通過它運行所有REST請求而不是cfhttp調用,並且java對象正在維護一個池。不知道這是否會奏效,但這就是理論...... – hapimatt 2012-03-09 21:21:23
這可能是可能的,但它肯定要在Java級別完成。 – 2012-03-09 21:54:49
你完全確定嗎?看起來如果您可以保持與後端的HTTP 1.1連接,則可以在該上下文中發出多個REST API請求。 – 2012-03-09 18:29:55
http://www.w3.org/Protocols/rfc2616/rfc2616-sec8.html – 2012-03-09 18:30:43