2011-12-07 44 views
0

我试图将我的iOS应用程序连接到从我的Web服务获取数据,每次有所改变。我目前的实现是使用NSTimer并执行ASIHttpRequest,但我不喜欢该轮询实现。有没有更好的方法来做到这一点?使用asihttprequest获取基于http状态代码的数据

我正在考虑启动请求,并让它继续尝试,直到Web服务状态代码变为OK(状态200)或可能是“已修改”的状态代码。我如何在视图控制器中执行此操作?

这是我到目前为止有:

self.asiRequest = [ASIHTTPRequest requestWithURL:[NSURL URLWithString:self.barcodeUrl]]; 
[self.asiRequest setDelegate:self]; 
[self.asiRequest startAsynchronous]; 
[self.asiRequest addRequestHeader:@"Accept" value:@"application/json"]; 
[self.asiRequest addRequestHeader:@"Content-Type" value:@"application/json"]; 
int statusCode = [self.asiRequest responseStatusCode]; 

我知道,如果请求成功,委托方法- (void)requestFinished:(ASIHTTPRequest *)request

我想我的问题是,我该如何保持开放的ASIHttpRequest这样当Web服务返回“修改”时,它会调用GET请求,然后再次保持打开的连接?这必须是异步的,并且不会在UI线程上运行,因为我不想让应用程序挂起。

非常感谢!

回答

0

最简单的方法做到这一点,而不必在客户端做很多事情是让你的web服务发送一个Location:头,当它返回“修改”,指向你想要的GET与新的URL内容。如果要监视的URL根据例如用户ID或您所在应用程序的区域,创建一个监视器脚本,您可以在其中传递参数GET params来配置在返回“修改”时应返回给您的确切URL。

ASIHTTPRequest将自动GET在新Location:的内容,您可以在requestFinished:再次重新安排到监视器URL,明知响应(如果不为空/“不修改”)将永远是因为新数据重定向到新数据发生在幕后。