繁体   English   中英

MultiThreaded Libcurl

[英]MultiThreaded Libcurl

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

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

我也在使用cookies,使用CURLOPT_COOKIEFILECURLOPT_COOKIEJAR会使Libcurl加载每个线程的cookie文件吗?

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

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

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

更新2013年3月

libcurl现在是线程安全的。

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

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

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

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

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

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

另请查看libcurl共享界面 它是为此目的而设计的,即在请求之间共享数据:

您可以在多个简易句柄之间共享数据。 让他们更新并使用相同的cookie数据库 ,DNS缓存,TLS会话缓存! 这样,每次传输都将利用其他传输所做的数据更新。 但是,共享接口不共享不同简单句柄之间的活动或持久连接。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM