gpt4 book ai didi

ios - 流式/分块 HTTP 和 NSURLSession 挂起

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:02:25 30 4
gpt4 key购买 nike

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

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

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

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

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

最佳答案

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

但是,如果服务器将 Content-Type header 更改为“application/json”,它将不会被缓冲,并且您的回调将在实际收到内容后立即触发。

关于ios - 流式/分块 HTTP 和 NSURLSession 挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21816691/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com