Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS多线程响应_Ios_Multithreading_Httpresponse - Fatal编程技术网

iOS多线程响应

iOS多线程响应,ios,multithreading,httpresponse,Ios,Multithreading,Httpresponse,我有一个应用程序需要来自web服务器的数据。我在不同的国家拥有服务器,以确保快速响应本地请求。在应用程序开始时,我想决定应该使用哪台服务器,因此我的计划是向不同的服务器发送请求,并首先检查哪些响应 我在每台服务器上都有一个check.php,并返回“ok”作为响应,我可以在不同的线程中调用它,但我不知道如何将serverURL设置为第一个响应的服务器。有人能帮忙吗?还是有更好的方法来实现我想要的 NSURL *url = [NSURL URLWithString:@"http://server_

我有一个应用程序需要来自web服务器的数据。我在不同的国家拥有服务器,以确保快速响应本地请求。在应用程序开始时,我想决定应该使用哪台服务器,因此我的计划是向不同的服务器发送请求,并首先检查哪些响应

我在每台服务器上都有一个
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;
} 

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

假设您发送了许多请求,并且每个请求在完成时都会覆盖您的
serverURL
值,这就是为什么最终会得到最新的服务器。为了避免这种情况,您可以将
serverURL
作为属性或全局变量,然后检查
serverURL
在赋值之前是否已经有值,如果有,则不要更新它

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

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

假设您发送了许多请求,并且每个请求在完成时都会覆盖您的
服务器URL
值,这就是为什么您最终会得到最新的请求。为了避免这种情况,您可以将
serverURL
作为属性或全局变量,然后检查
serverURL
在赋值之前是否已经有值,如果有,则不要更新它

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

实际上,一旦您得到第一个响应,您就可以取消其他请求,因为您不再需要他们的答案。

为每个服务器创建一个标志变量,与url变量链接。使用GCD将
url
发送到主线程,如果它不是零,则设置
serverURL
。@KudoCC,你能提供更多的细节吗?为每台服务器创建一个标志变量,与你的url变量链接。使用GCD将
url
发送到主线程,设置
serverURL
,如果它不是nil。@KudoCC,你能提供更多的细节吗?我想(result==nil| |![result IsequalString:@“ok”)部分只是回退部分,但您的答案是正确的。
serverURL
是多线程中的全局值,因此您应该使用一些同步工具,例如锁定或将判断和赋值分派到主线程。我认为(result==nil||![result isEqualToString:@“ok”])部分只是回退部分,但您的答案是正确的。
serverURL
是多线程中的全局值,因此您应该使用一些同步工具,例如锁定或分派判断和分配到主线程。