Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 流式/分块HTTP和NSURLSession挂起_Ios_Nsurlsession - Fatal编程技术网

Ios 流式/分块HTTP和NSURLSession挂起

Ios 流式/分块HTTP和NSURLSession挂起,ios,nsurlsession,Ios,Nsurlsession,我一直在尝试移植这段代码。该代码在使用WinHTTP实现的windows上100%运行良好。在IOS 7模拟器上,我正在使用NSURLSession。对于常规HTTPS,get/post似乎可以正常工作 当我使用“流式”HTTP时,事情开始崩溃。在这种情况下,内容长度是未知的,因为数据是连续流入的 我有一个阻塞同步调用,它将等待当前请求完成。当我使用第一个命令时,同步循环将在代理被命中后退出。但是,如果我替换为注释的第二行,同步循环将挂起 [m_pDelegate.session

我一直在尝试移植这段代码。该代码在使用WinHTTP实现的windows上100%运行良好。在IOS 7模拟器上,我正在使用NSURLSession。对于常规HTTPS,get/post似乎可以正常工作

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

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

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

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

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


然而,若服务器将内容类型头更改为“application/json”,那个么它将不会被缓冲,一旦实际接收到某个内容,您的回调将立即触发

不幸的是,NSURLSession仍然如此。。。很遗憾,解决方案是修改服务。