来自服务器的iphone延迟响应

来自服务器的iphone延迟响应,iphone,ios,request,nsurlconnection,response,Iphone,Ios,Request,Nsurlconnection,Response,只要我向服务器发送请求(通过NSURLConnectionsendSynchronousRequest方法),服务器就会在大约2秒钟内收到请求,然后再在3-5秒钟内处理并发送回响应。然而,我只在30-35秒内得到响应。这种延迟使我们的沟通非常缓慢 甚至异步API也得到了延迟响应 早些时候,一切正常,客户端在10秒内得到了响应。 还有其他人有这个问题吗?原因可能是什么 编辑 以下是Wireshark分析的屏幕截图: 为了更好的形象 我应该怎么看数据包在说什么?为什么会被延迟 EDIT2 代码如下

只要我向服务器发送请求(通过
NSURLConnection
sendSynchronousRequest
方法),服务器就会在大约2秒钟内收到请求,然后再在3-5秒钟内处理并发送回响应。然而,我只在30-35秒内得到响应。这种延迟使我们的沟通非常缓慢

甚至异步API也得到了延迟响应

早些时候,一切正常,客户端在10秒内得到了响应。 还有其他人有这个问题吗?原因可能是什么

编辑 以下是
Wireshark
分析的屏幕截图:

为了更好的形象

我应该怎么看数据包在说什么?为什么会被延迟

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);

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

您如何知道何时收到iOS响应?NSLog?用户界面状态改变

另见以下问题:

更新

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

  • 策略1:尝试使用
    NSURL
    的异步连接调用,而不是同步连接调用
  • 策略2:尝试使用不同的HTTP库,例如
如果您想更仔细地了解HTTP连接的情况,可以使用诸如或之类的工具来调试正在发送和接收的数据。为了从这种分析中获得最大的好处,您需要对HTTP协议有一些了解。这可能比前面提到的策略更耗时

另请参见以下问题

更新

您正在访问自己的Web服务器,还是其他人的

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

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


另外,请仔细检查URL末尾是否有新行,如前所述。

您是通过wifi或celluar进行此操作的吗


从我的经验来看,当我的数据使用量超出限制时,我的手机提供商会降低我的下载速度。有时,在我使用了大量移动数据后,这种情况会在月末发生。

我不确定是否会说,但可能是网络问题,请先检查一下。这是正确的还是错误的??好吧,也许我错了。。但是首先检查一下

下面描述它可能会解决您的问题的代码:)


对我有效的解决方案

在请求头中,iOS默认将“gzip”设置为“接受编码”。gzip压缩需要花费大量时间,因此响应延迟。为了解决这个问题,我做了以下工作:

[theRequest setValue:@"" forHTTPHeaderField:@"Accept-Encoding"];
注意:检查您的标题,是否有任何响应延迟


感谢@occulus引导我访问请求标题

> P >为了解决异步HTTP请求中的问题,您应该考虑使用AFNETFrase

其WiFi具有无限的数据使用计划,我在NSLog > SeNealSimulouDebug < /C>之前,正在进行。我在后台线程中执行sendSynchronousRequest,所以我假设它相当于异步版本。如果使用浏览器或wget/curl获取相同的数据,会发生什么情况?可以吗?我试着使用苹果公司的Strategy1异步api(
NSURLConnection
),但延迟相同。还有,我试着用查尔斯,我不知道怎么用(将尝试策略2,并让您知道。我完全不同意有关同步/异步调用的评论。这可能会阻止UI,好吧,但不会引入延迟,尤其是在后台线程上运行时。将代码放在此处以更好地理解并检查您的网络…可能是您的网络问题。网络工作是我检查的第一件事。与n无关。)网络。将尝试您的代码一个快速的问题,这是否意味着gzip压缩仅在请求而不是响应时被删除?我相信是这样,但希望得到确认:)否。在请求头中设置此选项可确保在整个连接中(甚至在响应中)没有gzip压缩。那么,如果响应很大怎么办?我可以问一下您的案例中回复的平均大小吗?:)我可能会遇到同样的问题,所以我想得到更好的理解,以便决定是否也应该在页眉中设置它。不能肯定。但你可以假设它是一些小手帕,我明白了。我将首先关注延迟,然后做出决定:)这根本不是真的,AFNetworking是基于NSURLCOnnection的
[theRequest setValue:@"" forHTTPHeaderField:@"Accept-Encoding"];