如果服务器脱机,请快速检测

时间:2012-05-21 05:54:09

标签: objective-c nsurlconnection

我们使用PHP服务器和iOS应用程序。

我使用NSURLConnection向服务器发送消息。如果服务器不可用,例如地址不正确,然后我们等待60-90秒后的错误。这是很长一段时间。

如何减少这段时间?是否有任何快速功能来检查服务器可用性?

如果我先打电话

[request setTimeoutInterval:10];
[request setHTTPBody:[message data]];

当我检查[request timeoutInterval]时,它仍然是240,而不是10.很有趣..

如果在创建连接之前添加setTimeoutInterval:调用,请执行以下操作:

[request setTimeoutInterval:10];
connection = [[NSURLConnection alloc] initWithRequest: request delegate: self];

请求在很长一段时间后仍然会返回。

4 个答案:

答案 0 :(得分:1)

如果服务器确实已关闭,您可以先触发可更改性框架,然后在触发HTTP请求之前检查是否可以访问服务器。

请参阅此答案以获取此示例:

Reachability Guide for iOS 4

答案 1 :(得分:1)

是的,超时并不像你期望的那样有效。一种解决方案是设置一个计时器,在您所需的间隔过去后取消连接。我在我的ReallyRandom课程中这样做了,似乎可以解决这个问题。

它看起来像这样:

connection = [[NSURLConnection alloc] initWithRequest: request delegate: self startImmediately:NO];

timer = [NSTimer scheduledTimerWithTimeInterval:10
                                     target:self
                                   selector:@selector(onTimeExpired)
                                   userInfo:nil
                                    repeats:NO];

[connection start];


// When time expires, cancel the connection
-(void)onTimeExpired
{
    [self.connection cancel];
}

答案 2 :(得分:0)

您可以减少请求中的超时时间,并在方法中指定timeoutInterval参数:

+ (id)requestWithURL:(NSURL *)theURL cachePolicy:(NSURLRequestCachePolicy)cachePolicy timeoutInterval:(NSTimeInterval)timeoutInterval

但是很难判断服务器是不可用还是只是忙碌。您可以确定如果服务器在某个时间间隔内没有响应,则可能是它已关闭。否则你将不得不等待。

答案 3 :(得分:0)

此代表

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error


if (error.code == NSURLErrorTimedOut)