使用NSURLConnection进行长轮询

pix*_*x0r 14 iphone comet objective-c

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

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

Mat*_*ges 7

NSURLConnection将在下载数据时缓冲数据,并使用该didReceiveData方法将数据全部返回给您.该NSURLConnection班不能告诉网络延迟和数据故意分裂之间的差异.

您可能需要使用像CFSocket这样的低级网络API(您可以访问网络接口中的每个字节,并且可以区分有效负载的两个部分),或者您可以使用看看像CURL这样的库,看看那里有什么类型的输出缓冲/非缓冲.