哪个用的? NSURLConnection与较低级别的套接字API

时间:2011-07-02 06:48:01

标签: iphone objective-c cocoa-touch networking nsurlconnection

我正在开发一个iPhone应用程序,它从服务器流式传输数据(e.x.ECGData,如点),并在屏幕上显示(表示绘图) - 即直播。为此,我使用的是NSURLConnection

我面临的问题是,由于数据从服务器到iPhone的速度非常快,缓存缓冲区正在迅速增加,导致显示的数据落后于来自服务器的实际数据。一段时间后,应用程序进行得太慢,并收到内存警告。

所以我的问题是,我应该如何处理来自服务器的这些数据?我应该继续使用NSURLConnection还是进行更低级别的套接字编程?

2 个答案:

答案 0 :(得分:1)

我建议你实现某种流量控制:

最简单的方法是在缓冲区已满时删除数据。对于视频流,可以删除帧。我不知道您的数据是否可以实现相同的效果。

另一种方法是从 NSURLConnection 的基于事件的API(框架控制何时必须做出反应)切换到 CFSocket 类,您可以在此类中读取数据你准备好了。它更低级,需要一个单独的线程和一些高级逻辑,比如在缓冲区已满时进入休眠状态,并在主线程显示更多数据并在缓冲区中占用更多空间时被唤醒。通过这种方法,您基本上可以构建在TCP流量控制机制之上。

另一种方法是使用另一种网络协议,您可以更好地控制发送的数据量。

答案 1 :(得分:0)

我会使用ASIHttpRequest流媒体。您可以实现委托方法request:didReceiveData:,以便在数据进入时将数据放入块中,如果需要,可以对其进行收缩并显示。如果需要缓存,可以随时将其保存到文件中。

相关问题