使用 NSURLRequest 进行长轮询

Long polling with NSURLRequest

我有一个基本的疑问,在搜索和 Whosebug 之后还没有找到。我在 PHP 中有一个长轮询后端实现。那里的逻辑是连接保持活动状态,直到在服务器中找到新消息。这是一个无限循环,其中 returns 新消息(如果可用)并断开连接,或者如果没有新消息可用则它不发送任何响应。一切都好。后端和长轮询的概念没有问题。

我面临的主要问题或限制是在前端,即 iOS。我有 NSURLRequest 来设置与我的 "long polling" 后端的连接,但我的前端请求连接具有默认超时期限,当它达到该超时间隔时会断开连接。这是我在这里的限制。根据苹果文档,他们有一个初始化程序,它接受自定义超时间隔的参数,但我的问题仍然是我应该在这里提供什么间隔值? https://developer.apple.com/documentation/foundation/nsurlrequest/1528579-requestwithurl

在无法预测新消息何时可用的情况下,我不知道提供的超时间隔的建议值是多少。我的问题是知道是否有表示无限超时间隔的值?如果不是,那么您建议使用什么超时值,当该超时值到期并关闭连接时,我如何在前端顺利处理另一个轮询会话。

我的 objective 是为了避免建立更多的 http 连接,这已经被使用长轮询方式阻止了。但是,如果我的前端连接超时,假设每 60 秒超时一次,那么我必须发起另一个请求。如果那是唯一的方法那么我很好但是如果有办法让我的连接在前端保持活动状态直到后端关闭它那么请告诉我。

解决方案的答案可以是 swift 或此处的 objC。我只需要概念性的答案。

编辑解决方案:我不确定是否应该通过发布答案将其标记为已解决。但是我的解决方案似乎是代表 NSTimeInterval 接近无穷大的绝对值,它在幕后是两倍。这是link:What constant represents "never" for an NSTimeInterval?

将请求的超时设置为 .infinity,这将永远保持连接(如果网络等没有问题)

由于可能存在网络问题,或后台问题等,iOS可能会不顾超时关闭连接。因此,您必须在响应回调(或委托)中监听失败情况,并在需要时重试请求。