代码之家  ›  专栏  ›  技术社区  ›  pix0r

使用NSURLConnection进行长轮询

  •  14
  • pix0r  · 技术社区  · 16 年前

    -[NSURLConnectionDelegate connection:didReceiveData] 在我关闭连接之前不会被调用,无论我在创建时使用了什么缓存设置 NSURLRequest 我已经验证了服务器端是否按预期工作——第一个JSON事件将立即发送,后续事件将在发生时通过网络发送。有办法使用吗 NSURLConnection 以便在这些事件发生时接收这些事件,或者我是否需要降到CFSocket API?

    我开始着手集成CocoaAsyncSocket,但更愿意继续使用 NSUR连接 如果可能的话,因为它更适合我基于rest/JSON的web服务结构的其余部分。

    5 回复  |  直到 9 年前
        1
  •  7
  •   Matt Bridges    16 年前

    NSURLConnection 将在数据下载时对其进行缓冲,并使用 didReceiveData

    您可能需要使用较低级别的网络API,如您提到的CFSocket(您可以访问从网络接口进入的每个字节,并可以区分负载的两个部分),或者您可以查看以下库 CURL 看看有哪些类型的输出缓冲/非缓冲。

        2
  •  3
  •   nall    15 年前

    我今天碰到了这个。我编写了自己的类来处理这个问题,它模仿了NSURLConnection的基本功能。

    http://github.com/nall/SZUtilities/blob/master/SZURLConnection.h

        3
  •  0
  •   Allen Hadden    16 年前

    查看手机发送/接收内容的另一个选项在以下文章中进行了描述:

    http://blog.jerodsanto.net/2009/06/sniff-your-iphones-network-traffic/

    祝你好运

        4
  •  0
  •   Patrick Myles Patrick Myles    16 年前

    我发现在模拟器中,一旦收到1KB的数据,您将开始收到didReceiveData回调。因此,您可以发送一个1KB的垃圾块来开始接收回调。然而,在设备上似乎没有发生这种情况。在safari(在设备上)中,您需要发送2KB,但使用NSURLConnection时,我也没有收到任何回调。看来我可能不得不采取同样的方法。

    我还可以使用multipart replace和其他一些更新颖的标头和mime类型,看看它是否有助于刺激NSURLConnection。

        5
  •  0
  •   Ali Nadalizadeh    15 年前

    还有另一个名为ASIHttpRequest的HTTP API实现。它没有上述问题,并为几乎所有HTTP功能提供了一个完整的工具包,包括文件上传、Cookie、身份验证等。..

    http://allseeing-i.com/ASIHTTPRequest/