MultiThreaded Libcurl

时间:2011-08-01 14:51:43

标签: c++ multithreading libcurl

我需要使用Libcurl执行并行HTTP请求。

据我所知,我需要为每个线程创建一个新句柄 并使用CURLOPT_WRITEDATA与某种线程本地存储。 多接口是否使这项任务更容易一些?

我也在使用Cookie,使用CURLOPT_COOKIEFILECURLOPT_COOKIEJAR会使用Cookie Libcurl为每个线程加载cookie文件?

3 个答案:

答案 0 :(得分:8)

您可能知道,libcurl不是线程安全的,因此您应该确保libcurl句柄永远不会在多个线程之间共享。每个线程都需要存储本地数据(其中包括连接句柄)。

由此可见,对于每个句柄,即对于每个线程,libcurl将需要从头开始读取cookie文件,因为无法共享此信息。在我看来,这不是问题,虽然在更新它时可能会出现问题(你会有多个线程尝试它)。

关于多接口,它允许您复用多个传输,因此它是您尝试但在单个线程中执行的操作的另一种方法。

2013年3月更新

libcurl现在是线程安全的。

  

libcurl是免费的,线程安全的,IPv6兼容的,功能丰富,支持良好,快速,完整的文档,已经被许多已知的,大型和成功的公司以及众多应用程序使用。“

答案 1 :(得分:4)

这不是一个直接的答案,但为什么你需要对并行HTTP请求进行多线程处理?

多接口是为此目的而设计的:您添加多个句柄,然后通过一次调用处理所有这些句柄,所有这些都在同一个线程中。来自documentation

  

在同一个线程中启用多个同时传输而不使用   使应用程序变得复杂。

如果你想要多个线程,我建议你在每个线程中使用easy界面,忘掉多接口。

共享只需在简易句柄之间共享数据,您可以使用带有/不带多接口的界面。如果您使用多个线程,则必须提供自己的锁定。

答案 2 :(得分:0)

同时查看libcurl share interface。它是为此目的而设计的,即在请求之间共享数据:

  

您可以让多个简易句柄在它们之间共享数据。拥有他们   更新并使用 相同的cookie数据库 ,DNS缓存,TLS会话缓存!   这样,每次单次传输都将利用数据更新   由其他转移做出。但是,共享界面可以   不共享不同容易之间的活跃或持久联系   处理