2015-03-03 79 views
0

我有多個服務器在負載均衡器下設置,通過TCP連接向它們分發請求。換句話說 - 如果我在瀏覽器中發出很多請求,所有這些請求都會在打開TCP連接時被髮送到負載均衡器之下的服務器之一。在MAC上捲曲TCP keepalive

但是,當我通過curl發出請求時,TCP連接似乎沒有被重用,並且負載均衡器會將每個請求發送到新的服務器(循環算法)。


問題:

  1. 是否有可能實現與捲曲TCP持久?如果是這樣 - 如何?
  2. 我應該使用libcurl的東西,如:http://curl.haxx.se/libcurl/c/persistant.html - 我該怎麼做?
  3. 它與我使用mac的事實有關嗎? http://sourceforge.net/p/curl/bugs/1214/

謝謝。


我曾嘗試:

for i in {1..100}; do curl --keepalive --keepalive-time 50 -s -D - http:URL -o /dev/null; done 

而循環運行此,看到新的端口每次使用:

lsof -i -n -P | grep curl 

回答

1

這是不可能的,你設想的方式。由於您正在爲每個URL創建一個新的curl進程,這將導致一個新的TCP連接,並以進程關閉結束。所以,即使curl本身會使用TCP keep-alive,也無關緊要,因爲只有在該過程完成之前它纔會處於活動狀態。只要這些請求在同一個進程內(就像重定向一樣),curl本身就會嘗試重複使用同一個連接進行多個請求。

您需要的是在同一個進程中處理多個URL的方式,以便它們可以爲多個請求重複使用相同的TCP連接。這對於curl命令行工具來說是不可能的,因爲每次運行只能處理一個URL。你必須使用一個可以在同一個進程中處理多個URL的工具。

是否可以使用CURL啓用TCP Keepalive?如果是這樣 - 如何?

是的,這是可能的,但它不會幫助你的問題。

我應該使用libcurl的東西,如:http://curl.haxx.se/libcurl/c/persistant.html - 我應該怎麼做?

是的,這可能會有所幫助,因爲您可以在同一過程中以這種方式執行多個請求。綁定可用於不同的編程語言。你也可以使用本地和舒適的HTTP處理各​​種腳本語言如python,perl,ruby ...

是否與我使用mac的事實有關?http://sourceforge.net/p/curl/bugs/1214/

不,因爲問題本身不能用TCP保持活力。

+0

感謝您的確認! – 2015-03-03 09:28:26