【问题标题】:NSURLConnection getting limited to a Single Connection at a time?NSURLConnection 一次被限制为一个连接?
【发布时间】:2012-01-22 00:23:59
【问题描述】:

好的 - 让我们重新表述整个问题好吗?

有什么方法可以判断 iOS 在完成并返回数据后是否保留了 NSURLConnection?

我有 2 个 NSURLConnections 我正在实例化和调用服务器。第一个启动与服务器的连接,然后进入 COMET 样式的长轮询等待,同时另一个用户与请求交互。第二个进入服务器并触发取消机制,该机制安全地结束第一个请求并导致两者都成功返回,并带有“您已取消”消息。

在快乐路径的情况下,永远不会单击“取消”按钮。但是可以单击它并退出当前操作。

整个场景运行一次非常好。然后再也无法工作(直到应用程序被重置)。

就好像第一次通过其中一个连接永远不会被释放,并且从那时起我们仅限于一个连接,因为其中一个被锁定。


顺便说一句,我已经尝试过 NSURLConnection、AFNetwork、MKNetworkKit、ASIHTTPRequest - 没有任何其他框架的运气。 NSURLConnection 应该做我想做的。只是……不放弃我的一个人脉。

【问题讨论】:

  • 经过大量测试,似乎目前无法在 iOS 上使用长轮询。我希望它可以简化我的代码并允许我为 iOS 和 Android 保留一个 API。但现在我不得不为 iOS 实现一个丑陋的简单轮询 API。

标签: ios nsurlconnection comet


【解决方案1】:

我怀疑第 2 步中的取消请求使 HTTP 连接保持打开状态。

我不确切知道 NS* 类在 HTTP/1.1 recommendation of at most two simultaneous connections 方面是如何工作的,但我们假设它们最多执行两个连接。假设实例 A 中的触发代码(示例的步骤 1 和 3)自行清理,但实例 B 中的取消代码(步骤 2 和 4)使连接保持打开状态。这或许可以解释您所观察到的情况。

如果我是你,我会将第 1 步中运行的代码与第 2 步中运行的代码进行比较。我敢打赌,它们之间的清理方式是不同的。

【讨论】:

  • 我几乎在每一行代码中都添加了日志记录。唯一的差异是每种方法的 API URL 略有不同。发布的数据略有不同。我确实认为这可能是一个缓存问题,因为取消代码总是发送相同的数据,但由于日期/时间戳,触发代码具有一些唯一性。我通过在两个调用中添加日期/时间戳来消除这种情况。不过谢谢。 :(
【解决方案2】:

如果我没记错的话, 只要“Keep-Alive”标头指示,iOS/Mac 就会保留 NSURLConnection。

但作为 iOS 开发人员,您不必担心。你有什么理由想知道这一点?

【讨论】:

  • 我遇到了一个问题,我尝试同时使用 2 个 NSURLConnections。它最初可以工作,但在任何后续迭代中都不会。就好像 iOS 从来没有清理过初始连接之一。但我找不到任何关于我为什么会遇到这种情况的文档。我怀疑我做错了什么,但根本不清楚是什么。我会检查标题。谢谢。
  • 我找不到我会将该标头设置为禁用此功能的替代值。似乎它默认设置为 Keep-Alive。
  • 如果您的服务器是 Apache,您可以通过编辑服务器中的 httpd.conf 文件来更改它。如果使用 nginx 编辑适当的文件(我猜是 nginx.conf)。这些文件应该在 /var/etc/httpd/httpd.conf 或 /var/etc/nginx/nginx.conf
  • 我认为我需要全局设置 ON,有没有办法针对特定请求关闭它?
  • 我认为您不能从客户端关闭“保持活动”。
【解决方案3】:

不幸的是,由于在我的所有测试中都没有找到真正解决这个问题的方法,我不得不实施简单的轮询来解决这个问题。

我还必须在服务器上实现仅限 iOS 的 API。

这归结为一个 API,用于发送命令并将其放入服务器上的队列中,然后使用客户端上的 NSTimer 定期检查排队项目的状态。

直到我知道如何在 iOS 上通过长轮询建立多个连接,这是唯一可行的解​​决方案。一旦我有相当数量的积分,我会很乐意赏金他们以解决这个问题:(

【讨论】:

    猜你喜欢
    • 2012-09-20
    • 1970-01-01
    • 2012-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-11
    相关资源
    最近更新 更多