iOS 多线程响应
iOS multi-threading response
我有一个应用程序需要来自网络服务器的数据。我在不同国家都有服务器,以确保对本地请求的快速响应。在应用程序开始时,我想决定我应该使用哪个服务器,所以我的计划是向不同的服务器发送请求并首先检查哪些响应。
我在每个服务器上都有一个 check.php
和 return "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;
}
编辑:所有服务器都会响应,但世界另一端的服务器会更慢。我需要设置最快的服务器,而不是最慢的。
假设您发送了多个请求,并且每个请求在完成后都会覆盖您的 serverURL
值,这就是为什么您最终会收到最新的请求。为避免这种情况,您可以将 serverURL
作为 属性 或全局变量,然后检查 serverURL
在赋值之前是否已经有值,如果有,则不要更新它。
if ((result == nil || ![result isEqualToString:@"ok"]) && serverURL != nil) {
serverURL = aServer;
}
实际上,一旦您收到第一个回复,您就可以取消其他请求,因为您不再需要他们的回复。
我有一个应用程序需要来自网络服务器的数据。我在不同国家都有服务器,以确保对本地请求的快速响应。在应用程序开始时,我想决定我应该使用哪个服务器,所以我的计划是向不同的服务器发送请求并首先检查哪些响应。
我在每个服务器上都有一个 check.php
和 return "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;
}
编辑:所有服务器都会响应,但世界另一端的服务器会更慢。我需要设置最快的服务器,而不是最慢的。
假设您发送了多个请求,并且每个请求在完成后都会覆盖您的 serverURL
值,这就是为什么您最终会收到最新的请求。为避免这种情况,您可以将 serverURL
作为 属性 或全局变量,然后检查 serverURL
在赋值之前是否已经有值,如果有,则不要更新它。
if ((result == nil || ![result isEqualToString:@"ok"]) && serverURL != nil) {
serverURL = aServer;
}
实际上,一旦您收到第一个回复,您就可以取消其他请求,因为您不再需要他们的回复。