我正在发布一个小图片,所以我希望超时间隔很短.如果图像在几秒钟内没有发送,它可能永远不会发送.由于某种未知的原因NSURLConnection,无论我设置多短,我都永远不会失败timeoutInterval.
// Create the URL request
NSMutableURLRequest *request = [[NSMutableURLRequest alloc]
initWithURL:[NSURL URLWithString:@"http://www.tumblr.com/api/write"]
cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:0.00000001];
/* Populate the request, this part works fine */
[NSURLConnection connectionWithRequest:request delegate:self];
Run Code Online (Sandbox Code Playgroud)
我有一个断点,- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error但它永远不会被触发.我的图像继续张贴得很好,尽管很小,它们仍然出现在Tumblr上timeoutInterval.
我有一个应用程序,它使用API在网站上获得实时更新.他们使用他们所谓的长轮询技术:
长轮询是传统轮询技术的变体,允许模拟从服务器到客户端的信息推送.通过长轮询,客户端以与普通轮询类似的方式从服务器请求信息.但是,如果服务器没有可用于客户端的任何信息,而不是发送空响应,则服务器保留请求并等待一些信息可用.一旦信息可用(或在适当的超时之后),就会向客户端发送完整的响应.然后,客户端通常会立即从服务器重新请求信息,这样服务器几乎总会有一个可用的等待请求,它可以用来传递数据以响应事件.在web/AJAX上下文中,长轮询也称为Comet编程.
长轮询本身不是推送技术,但可以在无法实现真正推动的情况下使用.
基本上,这会在您收到回复后强制将请求发回服务器.在iPhone应用程序中执行此操作的最佳方法是什么?这最终必须在后台运行.
我正在将我的应用程序转换为使用HTTPS,并希望通过保持打开长期连接来尽可能避免握手成本.
从堆栈溢出中读取Web和其他答案,如果服务器响应Connection,则NSURLConnection应该透明地保持底层套接字打开:keep-alive和Keep-Alive:timeout = N.
但是我看到我的连接只保持打开大约10秒钟.我的Keep-Alive响应设置远不止于此.我也在我的请求标题中发送Connection:keep-alive.
任何人都可以对此有所了解吗?我真的不想使用CFNetwork实现这一目标.
我正在尝试从URL获取一些数据,但出于某种原因,当我执行以下操作时没有任何反应.无论是didReceiveResponse:,didReceiveData:,didFailWithError:或者connectionDidFinishLoading:是达到了,除非我添加超时通过这样做我的要求:[request setTimeoutInterval:10.0]
这是我正在做的事情:
-(void)getConfigFromServer{
[self getContentAtURL:kUrlGetUser];
}
//Va chercher le contenu à l'URL passée en paramètre
- (void)getContentAtURL: (NSURL *)url {
[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
NSString * userLogin = [userDefaults objectForKey:@"UserLogin"];
NSString * userPassword = [userDefaults objectForKey:@"UserPassword"];
NSURL * urlFinal = [NSURL URLWithString:[NSString stringWithFormat:@"%@", url]];
NSLog(@"Request : %@", [NSString stringWithFormat:@"%@", url]);
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setURL:urlFinal];
[request setHTTPShouldHandleCookies:NO];
[request setTimeoutInterval:10.0];
NSString *sourceString = …Run Code Online (Sandbox Code Playgroud) 我需要连接的后端API大约需要3-4分钟才能返回响应.iOS客户端似乎在60秒(这是默认值)超时,我无法弄清楚如何延长时间.
我试图将NSURLRequest的timeoutInterval设置为一个大数字,并设置Connection:Keep-Alive标头,但我没有运气.这是我正在使用的代码,省略了一些API细节:
NSURL *url = [NSURL URLWithString:@"myAPI"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
NSString *postString = @"key1=val1&key2=val2...";
[request setHTTPBody:[postString dataUsingEncoding:NSUTF8StringEncoding]];
request.timeoutInterval = 600.0f;
[request setValue:@"Keep-Alive" forHTTPHeaderField:@"Connection"];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {
NSLog(@"data = %@", data);
}];
Run Code Online (Sandbox Code Playgroud)
即使后端API仍在处理请求,也不会返回任何数据并且所有响应头字段都为空.
我听说我可能需要设置一个名为"socketTimout"的区间,以便套接字知道保持连接打开的时间更长,但我不知道在哪里设置它.