Streaming / Chunked HTTP和NSURLSession挂起

时间:2014-02-16 21:11:26

标签: ios nsurlsession

我有这段代码,我一直试图移植。该代码使用WinHTTP实现在Windows上100%正常工作。在IOS 7模拟器上,我正在使用NSURLSession。对于常规的HTTPS get / post似乎工作正常。

当我使用“流式”HTTP时,事情开始崩溃。在这种情况下,内容长度未知,因为数据是连续流式传输的。

我有一个阻塞同步下面的调用,它会等到当前请求完成。当我使用第一个命令时,同步循环将在命中代理后退出。但是,如果我用注释的第二行替换,则同步循环会挂起。

        [m_pDelegate.session invalidateAndCancel];
//      [m_pDelegate.session finishTasksAndInvalidate];
blockUntilOperationsComplete();

最终它会退出,我确实得到了我的数据回调。我相信回调最终会在稍后触发MINUTES,因为小的保持活动消息(16个字节长)最终会溢出缓冲区并触发委托调用。有没有办法降低缓冲阈值?

1 个答案:

答案 0 :(得分:8)

在浪费了2天之后,我将把它留给下一个来的灵魂。无法通过现有的NSURL *类减少此缓冲区。事实证明,当前的实现(在iOS7上,似乎就像永远一样)因为chunked编码通过等待512字节的块编码有效负载来收集传入数据,并且只有在回调之后才会发生 - 重要部分如下 - 如果Content-Type是“text / html”。之后,所有后续流量触发的回调都会实时发生。

但是,如果服务器将Content-Type标头更改为“application / json”,它将不会被缓冲,并且只要实际收到某些内容,您的回调就会触发。