长轮询与NSURLConnection的(Long polling with NSURLConnec

2019-06-25 19:16发布

我的工作将使用长轮询从服务器通过HTTP发送事件通知到客户端的iPhone应用程序。 打开服务器上的连接后,我送表示事件JSON的小块,因为它们发生。 我发现-[NSURLConnectionDelegate connection:didReceiveData]没有被调用,直到后,我关闭连接,无论在创建时,我使用的缓存设置NSURLRequest 。 我已验证服务器端按预期工作 - 第一JSON事件将被立即发送,以及随后发生的事件将在电线,因为它们发生发送。 有没有办法使用的方式NSURLConnection ,因为他们的情况下接收这些事件,或者我需要,而不是下降到了CFSocket API?

我开始在整合CocoaAsyncSocket工作,但希望继续使用NSURLConnection ,如果可能的它适合我的REST /基于JSON的Web服务结构的其余部分要好得多。

Answer 1:

NSURLConnection将缓冲而它下载数据,并给它所有还给你一个块didReceiveData方法。 该NSURLConnection类不能告诉网络延迟和数据故意分裂之间的差异。

你要么需要你提到使用一个低级别的网络API一样CFSocket(你将有机会获得每个字节,因为它从网络接口进来,并可以区分你的有效载荷两个部分),或者你可以采取看就像一个图书馆卷曲 ,看看有没有什么类型的输出缓冲/非缓冲。



Answer 2:

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

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



Answer 3:

这听起来就好像你需要刷新在服务器端的插口,虽然它真的很难肯定地说。 如果你不能轻易改变的服务器要做到这一点,那么它可以帮助嗅出网络连接时看到的东西实际上是从服务器获取发送。

您可以使用一个工具,如Wireshark的嗅探网络。

对于看到的是越来越送到另一个选项/接收/从下面的文章中介绍的电话:

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

祝好运!



Answer 4:

目前,我们正在做一些R&d端口我们StreamLink彗星库添加到iPhone。

我发现,在模拟器一旦接收到的数据的1KB,你会开始得到didReceiveData回调。 所以,你可以发送垃圾1KB块开始得到回调。 看来,在设备上,但是,这种情况不会发生。 在Safari(器件),你需要发送2KB,但使用NSURLConnection的我也是没有得到回调。 看起来我可能不得不采取同样的做法。

我也可以用多替换和其他一些更新颖的页眉和MIME类型,看它是否有助于刺激NSURLConnection的发挥。



Answer 5:

还有一种名为ASIHttpRequest HTTP API实现。 它不具有上述问题的陈述,并提供了一个完整的工具包,几乎每一个HTTP功能,包括文件上传,饼干,认证,...

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



文章来源: Long polling with NSURLConnection