0

我们使用 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

4 回答 4

1

如果服务器真的宕机了,你总是可以先检查可达性框架并检查是否可以访问服务器,然后再触发你的 HTTP 请求。

有关此示例,请参阅此答案:

iOS 4 可达性指南

于 2012-05-21T11:08:53.367 回答
1

是的,超时并不像您期望的那样工作。一种解决方案是设置一个计时器,在您希望的时间间隔过后取消连接。我在我的真正随机课程中做到了这一点,它似乎起到了作用。

它看起来像这样:

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];
}
于 2012-05-21T18:22:58.173 回答
0

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

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

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

于 2012-05-21T07:16:22.760 回答
0

这位代表

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


if (error.code == NSURLErrorTimedOut)
于 2015-02-23T20:49:35.057 回答