2015-11-01 133 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其他公共成员函数不是线程安全的,可能会崩溃,但这些似乎并没有在这种使用情况下使用。

相关问题