我需要使用Libcurl执行并行HTTP请求。
据我所知,我需要为每个线程创建一个新句柄
并使用CURLOPT_WRITEDATA
与某种线程本地存储。
多接口是否使这项任务更容易一些?
我也在使用Cookie,使用CURLOPT_COOKIEFILE
和CURLOPT_COOKIEJAR
会使用Cookie
Libcurl为每个线程加载cookie文件?
答案 0 :(得分:8)
您可能知道,libcurl不是线程安全的,因此您应该确保libcurl句柄永远不会在多个线程之间共享。每个线程都需要存储本地数据(其中包括连接句柄)。
由此可见,对于每个句柄,即对于每个线程,libcurl将需要从头开始读取cookie文件,因为无法共享此信息。在我看来,这不是问题,虽然在更新它时可能会出现问题(你会有多个线程尝试它)。
关于多接口,它允许您复用多个传输,因此它是您尝试但在单个线程中执行的操作的另一种方法。
2013年3月更新
libcurl现在是线程安全的。
libcurl是免费的,线程安全的,IPv6兼容的,功能丰富,支持良好,快速,完整的文档,已经被许多已知的,大型和成功的公司以及众多应用程序使用。“
答案 1 :(得分:4)
这不是一个直接的答案,但为什么你需要对并行HTTP请求进行多线程处理?
多接口是为此目的而设计的:您添加多个句柄,然后通过一次调用处理所有这些句柄,所有这些都在同一个线程中。来自documentation:
在同一个线程中启用多个同时传输而不使用 使应用程序变得复杂。
如果你想要多个线程,我建议你在每个线程中使用easy界面,忘掉多接口。
共享只需在简易句柄之间共享数据,您可以使用带有/不带多接口的界面。如果您使用多个线程,则必须提供自己的锁定。
答案 2 :(得分:0)
同时查看libcurl share interface。它是为此目的而设计的,即在请求之间共享数据:
您可以让多个简易句柄在它们之间共享数据。拥有他们 更新并使用 相同的cookie数据库 ,DNS缓存,TLS会话缓存! 这样,每次单次传输都将利用数据更新 由其他转移做出。但是,共享界面可以 不共享不同容易之间的活跃或持久联系 处理