我需要使用Libcurl执行并行HTTP请求。
据我所知,我需要为每个线程创建一个新的句柄,并使用带有某种线程本地存储的CURLOPT_WRITEDATA。多界面是否让这项任务变得更容易了?
我也在使用cookie,使用CURLOPT_COOKIEFILE和CURLOPT_COOKIEJAR会让Libcurl为每个线程加载cookie文件吗?
发布于 2011-08-01 23:03:29
正如您可能知道的,libcurl不是线程安全的,所以您应该确保libcurl句柄永远不会在多个线程之间共享。每个线程都需要存储本地数据(尤其是连接句柄)。
因此,对于每个句柄,即每个线程,libcurl都需要从头开始读取cookie文件,因为这些信息不能共享。在我看来,这不是问题,尽管在更新它时可能会有问题(您将有多个线程尝试它)。
关于多接口,它允许您多路复用多个传输,因此这是另一种在单个线程中尝试完成的方法。
更新2013年3月
libcurl现在是线程安全的。
libcurl是免费的、线程安全的、兼容IPv6的、功能丰富、得到良好支持的、快速的、完全文档化的,并且已经被许多知名的、大的、成功的公司和无数的应用程序所使用。“
发布于 2011-08-01 23:01:00
这不是一个直接的答案,但是为什么并行HTTP请求需要多线程?
多接口就是为此目的而设计的:您添加多个句柄,然后通过一个调用处理所有这些句柄,所有这些句柄都在同一个线程中。从documentation
支持在同一线程中同时进行多个传输,而不会使应用程序变得复杂。
如果你想要多线程,我建议你在每个线程中使用简单的接口,忘记多接口。
共享只是在简单的处理之间共享数据,您可以使用具有/不具有多接口的接口。如果您确实使用多个线程,则必须提供自己的锁定。
发布于 2017-04-01 02:51:02
也可以查看。它就是为此目的而设计的,即在请求之间共享数据:
你可以让多个简单句柄在它们之间共享数据。让他们更新并使用相同的cookie数据库,DNS cache,TLS session cache!这样,每个单独的传输都将利用其他传输所做的数据更新。但是,共享接口不会在不同的轻松句柄之间共享活动连接或持久连接。
https://stackoverflow.com/questions/6900222
复制相似问题