Streaming/Chunked HTTP和NSURLSession挂起

use*_*547 2 ios nsurlsession

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

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

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

        [m_pDelegate.session invalidateAndCancel];
//      [m_pDelegate.session finishTasksAndInvalidate];
blockUntilOperationsComplete();
Run Code Online (Sandbox Code Playgroud)

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

mak*_*ksa 8

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

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