两个NSURLConnections之间的流,阻止NSInputStream读取阻止所有连接?

时间:2011-09-28 11:54:29

标签: iphone ios networking nsurlconnection nsinputstream

我正在尝试在两个iOS NSURLConenctions之间传输数据(一次下载,另一次上传),但似乎无法使其正常工作。

  • 我有两个同时运行的NSURLConnections。
  • 一个是使用GET请求从网址下载内容。
  • 另一个是将刚刚收到的相同内容上传到PUT请求的请求正文中的另一个URL。
  • 在上传连接中,我使用setHTTPBodyStream指定自定义NSInputStream,其read方法返回先前从另一个连接接收的数据。
  • 两个NSURLConnections都安排在单独的后台线程的运行循环中,这样任何(可能阻塞的)委托回调都不会相互混淆(也不会与主线程混淆)。

所以我认为它会像这样工作:

  • 上传连接在输入流上调用[read:maxLength](我已覆盖)。
  • 由于尚无可用数据,因此读取调用块。
  • 在另一个线程上,在下载连接的委托上调用[connection:didReceiveData:]。
  • 它将接收的数据放在共享缓冲区中,从而使其可用于上载连接的输入流。
  • 现在上传流的读取呼叫不再被阻止,它可以返回一大块数据。

不幸的是,在实践中,这不起作用。上传流的读取方法阻塞后,下载连接的委托方法(例如didReceiveData)不再被调用。 (请注意,如果我在上传端禁用阻止,则下载端的didReceiveData会被调用。)

我怀疑这必须要做的事情是上传输入流的read方法不是在创建连接和流对象的线程上调用,而是在其他一些线程上调用(显然由Cocoa创建)。好像这是两个NSURLConnections使用的共享线程,所以一旦它被阻止,所有其他连接也会停止工作。或类似的东西。

有没有人知道真正发生了什么?

另外,有没有办法控制请求体输入流的read方法被调用到哪个线程?

0 个答案:

没有答案