iOS多线程响应

时间:2016-11-25 10:08:43

标签: ios multithreading httpresponse

我有一个需要来自网络服务器的数据的应用。我在不同国家/地区设有服务器,以确保快速响应本地请求。在应用程序的开头我想决定我应该使用哪个服务器,所以我的计划是向不同的服务器发送请求并首先检查哪些响应。

我在每台服务器上都有check.php并返回" ok"作为响应,我能够在不同的线程中调用它,但我不知道如何将serverURL设置为第一个响应的服务器。有人可以帮忙吗?或者有更好的方法来实现我想要的目标吗?

NSURL *url = [NSURL URLWithString:@"http://server_de/check.php"];
NSError *e = nil;
NSString* result = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:&e];
if (result == nil || ![result isEqualToString:@"ok"]) {
    serverURL=ServerDE;
} 

编辑:所有服务器都会响应,但世界另一端的服务器会响应。我需要设置最快的服务器,而不是最慢的服务器。

1 个答案:

答案 0 :(得分:0)

假设您发送了一些请求,并且每个请求在完成后都会覆盖您的serverURL值,这就是您最终获得最新请求的原因。为避免这种情况,您可以将serverURL作为属性或全局变量,然后在分配之前检查serverURL是否已经有值,如果有,则不要更新它。

if ((result == nil || ![result isEqualToString:@"ok"]) && serverURL != nil) {
    serverURL = aServer;
} 

实际上,只要您收到第一个回复,就可以取消其他请求,因为您不再需要他们的答案了。