iphone延迟了服务器的响应

时间:2013-01-18 11:22:46

标签: iphone ios request nsurlconnection response

一旦我向服务器发送请求(通过NSURLConnection sendSynchronousRequest方法),服务器在大约2秒内收到请求,它会在另外3-5秒内处理并发回响应。但是,我只能在30-35秒内收到回复。这种延迟使我们的沟通非常缓慢。

即使异步API也会收到延迟响应。

早些时候,一切正常,客户在10秒内收到回复。 还有谁有相同的问题吗?可能是什么原因?

修改 这是Wireshark分析的屏幕截图:

Link更好的形象

enter image description here

我应该如何看待什么数据包说什么?..为什么会延迟?

EDIT2 这是代码:

 NSHTTPURLResponse *response=nil;

NSMutableURLRequest *theRequest=[NSMutableURLRequest requestWithURL:[NSURL URLWithString:nsURL] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:180.0];
[theRequest setHTTPMethod:@"POST"];
[theRequest setTimeoutInterval:180.0];
[theRequest setHTTPBody:[[NSString stringWithFormat:@"%@",sdata] dataUsingEncoding:NSASCIIStringEncoding]];

NSError *error= nil;

NSData *result = [NSURLConnection sendSynchronousRequest:theRequest returningResponse:&response error:&error];
if (error ) {
    NSLog(@"error sending synchronous request: %@", error);
}
NSLog(@"request completed with code:%d",response.statusCode);

5 个答案:

答案 0 :(得分:8)

我会避免打电话给sendSynchronousRequest。如果您没有在后台线程上进行调用(您不想阻止UI线程),请使用异步版本。

您如何知道何时收到iOS回复?一个NSLog? UI状态更改?

另见这些问题:

NSURLConnection sendSynchronousRequest - background to foreground

NSURLConnection sendSynchronousRequest taking too much time to respond

<强>更新

如果您有点卡住,一种策略可能是排除使用NSURLConnection作为问题。

  • 策略1:尝试使用NSURL的异步连接调用而非同步
  • 策略2:尝试使用其他HTTP库,例如AFNetworking

如果您想仔细查看HTTP连接的内容,可以使用CharlesFiddlerWireshark等工具来调试正在进行的数据发送和接收。要从这种分析中获得最大收益,您需要具备一些HTTP协议的知识。这可能比前面提到的策略更耗时。

另请参阅How to monitor network calls made from iOS Simulator等问题。

<强>更新

您是在访问自己的网络服务器,还是其他人的网络服务器?

您是否仔细查看了发送到您的网络服务器的标头(以及返回的标头)?例如,注意内容长度。错误的内容长度可能会导致延迟,如here所述。

要查看请求和返回的标题,您可以在命令行上使用Firebug或类似wget或curl的内容。

另外,请仔细检查您网址末尾是否有换行符,如here所述。

答案 1 :(得分:4)

解决方案对我有用:

在请求标头中,iOS默认为“Accept-Encoding”设置“gzip”。 gzip压缩需要花费大量时间,因此延迟响应。我做了以下事情来解决问题:

[theRequest setValue:@"" forHTTPHeaderField:@"Accept-Encoding"];

注意:检查标题,了解任何响应延迟。

感谢@occulus将我引导至请求标题!

答案 2 :(得分:0)

你通过wifi或celluar做到这一点?

根据我的经验,当我的数据使用被删除时,我的电话提供商减慢了我的下载速度。在我使用大量移动数据后,有时这种情况发生在我月底。

答案 3 :(得分:0)

我不肯说但是可能是网络问题首先检查一下。它适当还是下降?好吧也许我会错的......但首先检查一下......

按照描述代码可能会解决您的问题:)

NSString *url = @"Your URL ";

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:url] cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:60.0];
[request setHTTPMethod:@"POST"];

NSMutableData *body = [NSMutableData data];
.
.

    /// Add Here Your    NSMutableData Valuew 
.
.
[request setHTTPBody:body];
 NSURLConnection *theConnection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
if (theConnection)
{
    self.responseData = [[NSMutableData alloc] init];
}
else
    NSLog(@"Connection Failed!");

答案 4 :(得分:-1)

为了减轻异步HTTP请求的问题,您应该考虑使用AFNetworking框架