我正在开发一个 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/