2011-08-01 23 views
3

我需要使用Libcurl執行並行HTTP請求。MultiThreaded Libcurl

從我的理解,我需要爲每個線程創建一個新的句柄 和使用CURLOPT_WRITEDATA與某種線程本地存儲。 多接口是否使這個任務更容易一些?

我還在使用cookies,是否使用CURLOPT_COOKIEFILECURLOPT_COOKIEJAR會使 Libcurl加載每個線程的cookie文件?

回答

8

正如您可能知道的那樣,libcurl不是線程安全的,所以您應該確保libcurl句柄永遠不會在多個線程之間共享。每個線程都需要存儲本地數據(其中包括連接句柄)。

由此可見,對於每個句柄,即每個線程,libcurl都需要從頭開始讀取cookie文件,因爲這些信息不能共享。在我看來,這不是問題,雖然在更新它時可能會有問題(您將有多個線程嘗試它)。

關於多接口,它允許你複用多次傳輸,所以它是你嘗試做的另一種方法,但在一個單獨的線程中。

UPDATE 2013年3月

libcurl現在是線程安全的。

的libcurl是免費的,線程安全的,IPv6的兼容,功能豐富,很好的支持,快速,徹底的記錄,並已被許多已知的,大的,成功的企業和衆多的應用程序「。

4

這不是一個直接的答案,但爲什麼你需要多線程處理並行HTTP請求?

多接口專爲此目的而設計:您添加多個句柄,然後使用一次調用處理所有這些句柄,全部在同一個線程中。從documentation

允許在同一個線程多個同時傳送,而無需 使得複雜的應用程序。

如果你想要多個線程,我建議你在每個線程中使用簡單的接口,並忘記多接口。

在簡單句柄之間共享簡單共享數據,您可以使用帶/不帶多接口的接口。如果您確實使用多個線程,則必須提供自己的鎖定。

0

還檢查了libcurl share interface它被設計用於此目的,即請求之間共享數據:。

您可以在它們之間有多個方便的手柄份額數據讓他們 更新和使用同一個cookie數據庫,DNS緩存,TLS會話緩存! 這樣,每次單次轉賬都將利用其他轉賬所做的數據更新 。然而,共享接口 不會在不同的簡單 句柄之間共享活動或持續連接。