2015-11-01 122 views
0

我可以使用QNetworkCookieJar來檢索,存儲和重新發送QNetworkManager的Cookie。多個QNetworkAccessManager實例可以共享一個QNetworkCookieJar在Qt應用程序中共享Cookie的最佳方式

到目前爲止,我已經使用了多個QNetworkAccessManager情況下,每一個類(在這裏我需要閱讀):

  1. 所以我可能會給整個1..1 QNetworkAccessManager實例
  2. 或者是共享一個單QNetworkCookieJar最好只有一個單獨的QNetworkAccessManager,在所有QNetworkRequest之間共享一個Jar。作爲單一對象的方式是否是QNetworkAccessManager?文檔說應該只有一個實例。那麼我會更好地使用單身人士QNetworkAccessManager

什麼是最合適的方法?

------編輯-------

kkoehne's answer是什麼,我可以告訴正確的。這也是文檔所說的。然而,嘗試這種方法時,我已經注意到2個問題:

  1. 雖然我們現在一個QNetworkAccessManager有每個Web服務,轉變爲一個單一實例意味着我需要時刻區分什麼樣的內容我剛剛收到「完成「插槽(從QNetworkAccessManager::finished中調用的插槽)。這是可行的,但不方便。
  2. 我們用不同的線程運行我們的讀者 - 遺憾的是,我忘記在這個問題中提到這個問題。這使得幾乎不可能使用QNetworkAccessManager的單個實例,因爲成員函數是reentrant,但不是線程安全的。 (QNetworkAccessManager from ThreadPool

相關:QNetworkAccessManager get/post from different thread possible?

回答

1

我想你指的是QNetworkAccessManager,不QNetworkManager

你應該更喜歡在你的應用程序中有一個單一的QNetworkAccessManager。這不僅可以擺脫任何需要同步QNetworkCookieJar的需求,還可以確保網絡得到最佳利用,並且緩存的內容等是共享的。

當你注意到自己,這也暗示在QtNetworkAccessManager documentation

一個QNetworkAccessManager應該夠全的Qt應用 。

+0

正確,QNetworkAccessManager,而不是QNetworkManager我的錯誤。固定在上面 –

0

這裏是我做了什麼(這似乎工作):

  1. 如我們在讀線程我不能使用一個QNetworkAccessManager
  2. 共享QNetworkCookieJar不是一種選擇,因爲它不是線程安全的

但創造我自己的小線程 - 從QNetworkCookieJar派生 - 類很容易。我只需要擔心5個虛擬功能。我可以在我的QNetworkAccessManager之間共享這個線程安全cookie罐。

我在這裏運行一定的風險,因爲QObject其他公共成員函數不是線程安全的,可能會崩潰,但這些似乎並沒有在這種使用情況下使用。

相關問題