【问题标题】:How to tell libcurl to close idle connections after a period of time?如何告诉 libcurl 在一段时间后关闭空闲连接?
【发布时间】:2017-01-05 01:01:21
【问题描述】:

有没有办法让 curl 在连接空闲一段时间后关闭它们?

【问题讨论】:

  • 您是否尝试查找 CURLOPT_TIMEOUT?
  • 是的,它所做的只是限制请求的时间量。假设我将限制设置为 10 秒,请求需要 3 秒。在剩余的 7 秒及以后,该连接将处于空闲状态。我希望它在 60 多岁之后被“收集”。
  • 那么,理解对了,你想在最后一次传输有效数据后开始超时吗?在这种情况下,您必须按照 CURLOPT_TIMEOUT 中所述自行处理:[...] it has limited use in dynamic use cases with varying transfer times. You are then advised [...] using CURLOPT_PROGRESSFUNCTION to implement your own timeout logic.
  • 从 libcurl 7.65.0(2019-05-22 发布)开始,您可以使用 CURLOPT_MAXAGE_CONN(默认值为 118 秒):curl.haxx.se/libcurl/c/CURLOPT_MAXAGE_CONN.html 如果在超过此设置的 maxage 的缓存,它将被关闭。

标签: libcurl


【解决方案1】:

空闲连接保留在连接缓存中,直到

  1. 连接被重用
  2. 连接被终止,因为缓存需要空间
  3. 缓存被关闭并杀死

libcurl 仅重用连接被放入池的前 N ​​秒。默认值为 118 秒,应用程序可以使用 CURLOPT_MAXAGE_CONN 更改超时。

早于MAXAGE 的连接可能会在池中保留更长时间,因为仅在某些情况下检查连接年龄。但是,如果旧的,它永远不会被考虑重复使用。

【讨论】:

  • 这还没有实现吗?我不明白连接池系统如何无法监视它池的连接。当应用程序尝试使用时检查连接是否没有死是一个加号,(仍然比强制关闭/使用新连接更好)每个请求)但不是全部。通常我们知道连接在我们的基础设施(ELB、Node JS 服务器等)中保持活动多长时间,因此能够自己配置它应该是添加的首要功能。希望我是错的,没有正确查看文档..
猜你喜欢
  • 2020-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多