2015-03-03 119 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