iphone - 使用 NSURLConnection 进行长轮询

标签 iphone objective-c comet

我正在开发一个 iPhone 应用程序,它将使用长轮询通过 HTTP 将事件通知从服务器发送到客户端。在服务器上打开连接后,我发送了一小段代表事件的 JSON,当它们发生时。我发现 -[NSURLConnectionDelegate connection:didReceiveData] 直到我关闭连接后才被调用,无论我在创建 NSURLRequest 时使用的缓存设置如何。我已验证服务器端是否按预期工作 - 第一个 JSON 事件将立即发送,后续事件将在发生时通过网络发送。有没有一种方法可以使用 NSURLConnection 在这些事件发生时接收它们,或者我是否需要转而使用 CFSocket API?

我开始致力于集成 CocoaAsyncSocket,但如果可能的话我更愿意继续使用 NSURLConnection,因为它更适合我基于 REST/JSON 的 Web 服务结构的其余部分。

最佳答案

NSURLConnection 将在下载数据时缓冲数据,并使用 didReceiveData 方法将其全部返回给您。 NSURLConnection 类无法区分网络延迟和数据中的故意拆分。

您可能需要使用较低级别的网络 API,如您提到的 CFSocket(您可以访问来自网络接口(interface)的每个字节,并且可以区分有效负载的两个部分),或者您可以看看像 CURL 这样的图书馆看看那里有什么类型的输出缓冲/非缓冲。

关于iphone - 使用 NSURLConnection 进行长轮询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1120606/

相关文章:

ajax - 如何使用 ActionScript 3 进行 cometd 长轮询?

ios - 从 UICollectionView 完整内容创建 Pdf?

iphone - Obj-C 循环缓冲区对象,实现一个?

iOS Parse Block 结果存储在 UILabel 中

iphone - 在项目中使用带有核心数据的txt文件或sqlite吗?

javascript - 在隐藏的 iframe : Android equivalent in Comet context? 中下载文件

java - Android cometd 库

iphone - 如何将我的应用链接到 App Store 开发者页面?

iphone - applicationWillEnterForeground 从未调用过

ios - 如何在 iOS 中以 url 的形式发布数据?