【问题标题】:NSURLRequest receives data too lateNSURLRequest 接收数据太晚
【发布时间】:2011-04-14 09:39:09
【问题描述】:

我正在使用 NSURLRequest 从 Java Servlet 接收数据。 Servlet 正在立即向输出流写入内容。

NSURLRequest 立即收到响应connection:didReceiveResponse:,但接收数据持续15 - 20 秒。 (这就是didReceiveResponsedidReceiveData 之间的时间)。看起来 NSURLRequest 正在缓冲数据并等待更多数据。

我怎样才能避免这个问题?

【问题讨论】:

  • 您的意思是说 [didReceiveResponse] 和 [didReceiveData] 代表之间的时间太长了吗?
  • 这绝对是 Java Servlet 问题,要写入流的输出流的预期大小是多少?
  • 你应该检查传入数据的大小..因为我也在使用 NSURLRequest 并且完全没有问题
  • 使用[响应预期内容长度];在 didReceiveResponse 委托中。
  • [response expectedContentLength] 返回 -1。但是必须接收的数据大约是 4KB。

标签: iphone http servlets nsurlrequest


【解决方案1】:

NSURLConnection 使用低级缓冲来收集字节。

didReceiveResponse 和 didRecieveData 之间存在差异 - 因为会有一些可能导致延迟的代理/数据路由。

为了执行您的指标,您应该记录第一次 didRecieveData 和 connectionDidFinishLoading 之间的时间,并比较您在网络浏览器上执行相同操作的时间。

希望这会有所帮助。

【讨论】:

  • 好的,我已经在网络浏览器中测试过了。它也有 10 - 15 秒的延迟。我认为,servlet 没有正确关闭流。我也有一个java实现。我没有这样的延迟。
  • 好。现在您确定延迟不是由于 NSURLConnectionDelegates 中的一些不一致,因为您可以在浏览器中复制该行为。 Servlet 以不同的方式工作,所以我不想深入探讨。尝试专注于服务器实现并对其进行排序。我确信它会在 iOS 代码中正常工作。干杯。
猜你喜欢
  • 1970-01-01
  • 2018-04-28
  • 2011-04-24
  • 1970-01-01
  • 2023-03-25
  • 2021-11-03
  • 1970-01-01
  • 2014-11-14
  • 2018-10-16
相关资源
最近更新 更多