在我的应用程序的特定视图控制器上,用户按下按钮以调用REST POST请求。按钮通常被推几次。我正在使用AFNetworking 2.0来做到这一点。
POST请求和成功回调之间的延迟时间非常不稳定。有时它< 1秒钟,而其他时间则是几秒钟或更长时间。我要求滞后时间尽可能少。
一个可能的原因是TCP连接被关闭并重复重新打开。一些Stackoverflow文章提到,如果几秒钟后没有发送请求,iOS将关闭连接。实际上,当我使用NSTimer每2.5秒不断发送POST请求时,时间延迟减少到< 1秒。
但这似乎是一种粗暴的做事方式,我担心服务器端可能会被太多的请求淹没(这里的服务器实际上是一个覆盆子pi)。还有另一种方法吗? HTTP Persistent Connection提及AFRocketClient,但我尝试了它没有成功。可能是AFRocketClient仅用于服务器发送事件,而我正在做“客户端发送事件”吗?或者我的AFRocketClient实现错了?不完全理解火箭代码片段。
提前致谢!
我的代码如下:
- (void)updateSpeed {
NSURL *baseURL = [NSURL URLWithString:BaseURLString];
NSDictionary *parameters = @{@"command": @"48",
@"dat": @"0",};
//Create instance of AFHTTPSessionManager and set response to default JSON
AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc] initWithBaseURL:baseURL];
manager.responseSerializer = [AFJSONResponseSerializer serializer];
//Pass POST request
[manager POST:@"submit" parameters:parameters success:^(NSURLSessionDataTask *task, id responseObject) {
self.status = responseObject;
for (id key in self.status) {
NSLog(@"key: %@, value: %@ \n", key, [self.status objectForKey:key]);
}
[client SUBSCRIBE:@"submit" usingBlock:^(NSArray *operations, NSError *error) {
for (AFJSONPatchOperation *operation in operations) {
switch (operation.type) {
case AFJSONAddOperationType:
[resources addObject:operation.value];
break;
default:
break;
}
}
} error:nil];
} failure:^(NSURLSessionDataTask *task, NSError *error) {
NSLog(@"%@", [error localizedDescription]);
}];
}