【问题标题】:Long polling with NSURLRequest使用 NSURLRequest 进行长轮询
【发布时间】:2019-09-20 05:22:57
【问题描述】:

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

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

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

我的目标是避免建立更多的 http 连接,这已经通过使用长轮询方式阻止了。但是,如果我的前端连接超时,可以说每 60 秒一次,那么我必须发起另一个请求。如果这是唯一的方法,那我很好,但如果有办法让我的连接在前端保持活跃直到后端关闭,那么请告诉我。

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

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

【问题讨论】:

  • 将超时设置为无穷大并监听失败重复。
  • Infinite NSTimeInterval 的绝对值是多少?谢谢。
  • infinity 本身。也许引擎盖下的最大双倍,但我不确定。
  • 谢谢。我在问题编辑中更新了我的修复。

标签: ios long-polling


【解决方案1】:

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

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

【讨论】:

  • 我将其标记为解决方案,但无穷大在 swift 中属于 TimeInterval。不幸的是,如果我没记错的话,objC 中没有这样的 NSTimeInterval 成员或属性。所以我把链接放在那些使用 objC NSTimeInterval stackoverflow.com/questions/28200472/…
  • Objective-C 中有一个INFINITY 的宏。 Look here
猜你喜欢
  • 2017-05-15
  • 2018-11-16
  • 1970-01-01
  • 1970-01-01
  • 2015-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多