gpt4 book ai didi

ios - 我缺少有关 NSURLSessionConfiguration.HTTPMaximumConnectionsPerHost 的内容吗?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:37:32 36 4
gpt4 key购买 nike

我正在尝试用 NSUrlSession 替换一些古老的网络代码,但是将 HTTPMaximumConnectionsPerHost 设置为 1 没有任何效果。这个请求代码被调用了 170 次,但它在任何东西返回之前与主机建立了 170 次连接(在 CharlesProxy 中观察),这使服务器崩溃。我在这里遗漏了什么吗?

所有请求都指向相同的域和 url,只是参数不同。当然,我可以做一些不同的事情,但 HTTPMaximumConnectionsPerHost 似乎应该限制连接。

目前我正在针对 SDK 7 进行编译(因为必须仍然支持 iOS 6),但如果我可以让它工作,我可以放弃 iOS 6,只支持 7/8 并构建 vs 8。这是一个顺便说一句,企业应用程序。

+ (NSURLSession*) sharedSession
{
static NSURLSession* session;
static dispatch_once_t once;
dispatch_once(&once, ^{
NSURLSessionConfiguration * sessionConfig = [NSURLSessionConfiguration ephemeralSessionConfiguration];

sessionConfig.timeoutIntervalForRequest = 30.0;
sessionConfig.HTTPMaximumConnectionsPerHost = 1;
sessionConfig.HTTPCookieAcceptPolicy = NSHTTPCookieAcceptPolicyNever;
sessionConfig.requestCachePolicy = NSURLRequestReloadIgnoringLocalCacheData;

session = [NSURLSession sessionWithConfiguration:sessionConfig
delegate:nil
delegateQueue:nil];
});
return session;
}

+ (void) createRequestWithPayload2:(HttpRequestPayload *)payload
success:(void (^)(CommunicationResponse * response))success
failure:(void (^)(NSError * error))failure
progress:(void (^)(TaskStatus status))progressStatus
{
NSURLSession* session = [RequestSender sharedSession];

NSString * url = [NSString stringWithFormat:@"%@/%@", payload.baseURL, payload.urlParams];
NSMutableURLRequest* request = [[NSMutableURLRequest alloc]initWithURL:[NSURL URLWithString:url]];
[request setHTTPMethod:payload.method];
[request setAllHTTPHeaderFields:payload.headers];
if ( payload.body )
{
[request setHTTPBody:payload.body];
}

//NSLog(@"Request:\n%@",request);

NSURLSessionDataTask * task =
[session dataTaskWithRequest:request
completionHandler:^(NSData *data, NSURLResponse *resp, NSError *error)
{
dispatch_async(dispatch_get_main_queue(),
^{
if ( error )
{
NSLog(@"%@",error);
failure(error); }
else
{
NSHTTPURLResponse *response = (NSHTTPURLResponse*) resp;
//NSLog(@"%@",response);
//NSLog(@"%@",data);
CommunicationResponse* cr = [CommunicationResponse new];
[cr set_commStatus:response.statusCode];
[cr set_response:data];
success(cr);
}
});
}];

[task resume];
}

最佳答案

好像你不是在分享,而是每次都创建新的 session 。 HTTPMaximumConnectionsPerHost 仅限制当前 session 的连接数。

来自文档

This limit is per session, so if you use multiple sessions, your app as a whole may exceed this limit.

NSURLSessionConfiguration : HTTPMaximumConnectionsPerHost

作为替代方案,您可以将 discretionary 属性设置为 YES (TRUE)。它将所有 session 中的所有连接限制在一个合理的数量。

NSURLSessionConfiguration : discretionary

关于ios - 我缺少有关 NSURLSessionConfiguration.HTTPMaximumConnectionsPerHost 的内容吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27252438/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com