RestKit网络限制在并行请求运行时阻止其他调用

时间:2014-12-18 10:23:58

标签: objective-c multithreading rest restkit restkit-0.20

我们正面临一个问题。 我们有不断下载文件的后台请求(每个文件最多5MB)。同时,我们有一个大多数导航都需要REST调用的UI。

我们限制了后台下载的数量,因此它不会使RESTkit使用的operationQueue窒息。

当在后台下载多个文件时,我们会看到1-> 2 MB的网络使用情况(这是可以理解的)。

问题是:用户在应用中导航,每个导航都会调用快速REST调用,该调用应返回非常少的数据。但由于后台下载,UI调用将持续(约10秒)。

优先级没有帮助,我看到我立即进行的UI调用由操作队列处理(因为我们限制了下载限制,并且NSOperationQueue有更多空间来满足其他请求。

当我们将并发REST下载调用限制为5时 - 来自UI的REST调用花费了10秒。 当我们将并发REST下载调用限制为2时 - 一切正常。

这里的问题是因为我们只允许在后台进行2次下载 - 下载文件的整个后台操作将需要永远。

最好的方案是每个UI调用都被视为最重要的网络方式,甚至暂停后台操作,只让UI调用处理 - 然后恢复后台操作 - 但我不是确定它是可能的。

解决这个问题的任何其他想法?

1 个答案:

答案 0 :(得分:1)

您可以使用2 RKObjectManager s,这样您就有2个独立的队列,然后使用一个用于'UI',另一个用于'背景'。最重要的是,您可以以不同方式设置每个队列的并发限制,并且可以暂停后台队列。请注意,暂停队列并不意味着已经暂停运行的操作,它只会阻止新操作的启动。

通过这样做你可以获得一些控制,但更好的选择实际上是限制数据流,特别是在移动数据网络上运行时,并通知用户发生了什么,以便他们可以接受这种情况或暂停直到后面。