我不使用任何花哨的请求框架,只使用委托的异步NSURLConnection.
该应用程序通常与WiFi和3G BUT一起使用
一些用户在使用3G时报告随机断开连接(在美国).所有请求都是okey但偶尔请求失败并显示“无法连接到主机”(-1004)错误.
这会对用户体验产生很大影响.
一些事实:
>它不会发生在wifi上
>用户报告使用3G时其他应用程序不会发生这种情况.
>这不是超时问题,启动连接后错误出现0.3-1.0秒.
>我们无法使用traceroute重现问题.
>使用SCNetworkReachability,主机似乎可以访问(我知道此API的限制).
问题问题可能是什么原因?什么连接属性可以与3G和WiFi不同?我该怎么调试呢?
目前,我看到的唯一解决方案是,如果先前的请求失败,则尝试再次发送请求.但是,我想首先找到问题的原因.
编辑问题可能是由我们的一个路由器引起的. IT人员仍在检查问题.
解决方法
CFNetwork Error Codes Reference
代码-1004仅被描述为
kcfURLErrorCannotConnectToHost
The connection Failed because a
connection cannot be made to the host. Available in OS X v10.6 and
later. Declared in CFNetworkErrors.h.
它基本上意味着用户有一个连接(他不在飞行模式,数据流量打开,他的手机在网络中注册,你有一个有效的URL等),但积极阻止连接到服务器.如果服务器没有响应,你会在更长的等待时间之后遇到更像是超时错误的事情,正如你所描述的那样.
这种错误可能是由阻止服务器流量的事情引起的,例如,如果用户位于防火墙或代理后面,就会发生这种错误.
问题实际上可能是由提供商引起的,特别是如果您对某些用户没有问题,以及其他人的随机问题.
正如其他一些海报所说,您可以尝试向用户询问他们的服务提供商,以及有关他们的位置的更多详细信息,或他们在收到错误时所做的事情(比如坐在车里或在乡下接待不好)
如果您找不到任何模式,并且错误实际上只是随机出现而且仅针对某些用户,有时候,我只会认为这是另一个不可避免的问题,可能是因为手机永远无法保证一直连接,并且有些手机提供商可能并不总是提供应该在那里交付的所有软件包的100%……那么你需要做的只是处理错误.
通过简单地重试并且不向用户显示错误来消除错误,至少在经过足够的重试之后才会出现错误.
最后要考虑的事情是:
如果您从应用程序发送大量请求以及大量数据,请确保您不会通过发送大量未完成请求来“过度消费”.这可能会导致服务器或某些代理服务器拒绝您的请求,因为它太忙于回答您的其他请求.被拒绝的请求可能会导致这样的错误.确保发送合理数量的请求,以便用户的设备有时间“呼吸”.