簡體   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