gpt4 book ai didi

iphone - 长时间运行的 REST API

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

我需要连接的后端 API 大约需要 3-4 分钟才能返回响应。 iOS 客户端似乎恰好在 60 秒(默认值)时超时,我不知道如何延长该超时时间。

我曾尝试将 NSURLRequest 的 timeoutInterval 设置为较大的数字,并设置 Connection: Keep-Alive header ,但我没有成功。这是我正在使用的代码,省略了一些 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);
}];

即使后端 API 仍在处理请求,也不会返回任何数据并且所有响应 header 字段都为空。

我听说我可能需要设置一个称为“socketTimout”间隔的东西,以便套接字知道保持连接打开的时间更长,但我不知道在哪里设置它。

最佳答案

与其尝试延长超时时间,不如稍微修改一下您的服务器架构。让服务器在获取所有数据后立即返回 200 OK,然后在后台队列中完成处理。创建另一个可用于检索数据的 API 调用,并让 iOS 应用程序定期检查数据是否已处理。或者,使用推送通知让用户/手机知道数据何时处理完毕。

如果您恰好在使用 Ruby on Rails,那么将长时间运行的进程设置为在工作线程上运行是非常容易的。看看 delayed_job Ruby gem。

如果由于某种原因您无法修改服务器的运行方式,请尝试确保您使用的 API 本身没有设置超时。我想不出 iOS 会忽略您设置的 timeoutInterval 的原因,除非该属性是只读的。尝试改用此 init 方法:

- initWithURL:cachePolicy:timeoutInterval:

关于iphone - 长时间运行的 REST API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16470290/

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