2013-10-24 122 views
6

我收到了一些基于用户活动的网络应用。应用程序发送的平常负载是100-200字节,所以基本上没有繁重的任务。这些任务通常没有任何问题(统计数据为99.9%或请求没有问题),但除了这些联网活动之外,我的应用也将心跳发送回我们的服务器(这些服务器位于亚马逊的EC2(us-east1-如果那会很重要))。 Heartbeat每10秒发送一次,作为通过HTTPS的普通POST请求 - 这对我来说并没有什么作用,因为故障率远远高于正常网络活动的情况 - 在我最近的7小时测试中,25%的心跳请求失败但我甚至看到了35%的下降),并且通常保持在这个速度。当我禁用SSL时,错误率在我的测试设备上保持在8%。如果这些失败会落入任何模式(即每个第4等可能意味着某些基于速率的过滤,或者会在接近每个整整一小时或每一天时失败,这可能意味着某种请求上限被设置在某处),这可能不是真正的大问题)。但是没有发生这种情况 - 有时10-15个请求可能会连续失败,这对心跳不利。此外,为了让事情变得更糟,目前我看到请求失败,我可以使用同一设备连接到服务器,而且这种工作没有问题)。此问题发生在任何受支持的Android版本(2.2+)上。追踪网络“稳定性”问题的根源

我使用最近的httpclientandroidlib做HTTP请求,所以我开始怀疑lib是一个罪魁祸首,所以我切换到Android Asynchronous HTTP Client,但它没有真正改变。我主要是越来越异常,如:

NoHttpResponseException: The target server failed to respond The target server failed to respond URL: https://xx.xx.xx.xx/heartbeat/

和启用SSL连接也:

javax.net.ssl.SSLException: Read error: ssl=0x784bc588: I/O error during system call, Connection reset by peer Read error: ssl=0x784bc588: I/O error during system call, Connection reset by peer URL: https://xx.xx.xx.xx/heartbeat/

我基本上是想先追查元凶,因此,了解该应用程序运行在移动网络上居多,我对任何有关如何进一步解决这个问题的建议表示欢迎,因为此刻我陷入了一些困境。

+0

您是否完全检查了服务器的性能? –

+0

“通过对等方重置连接”这可能是服务器问题。为了说清楚你可能会用WireShark来追踪它。 http://www.wireshark.org/ – Devrim

+0

你的图书馆的新选择有一些有趣的问题:https://github.com/loopj/android-async-http/issues – flup

回答

0

运行这个程序,并只是做一个正常的平看到错误率:https://play.google.com/store/apps/details?id=com.ulfdittmer.android.ping

运行它既移动网络(蜂窝)和WiFi上。

如果您使用的是WiFi,请使用笔记本电脑运行ping -n 100 google.com,以验证您的路由器和网络接入点是否不脆。如果是这样,请拔掉路由器并重新插入。Linksys路由器和接入点以及Belkin接入点就像这样。

如果您需要10s的心跳,请将HTTP超时设置为3-5秒并快速失败,如果失败则重试。

0

那么如果你在hearthbeat线程和ui线程中共享你的HttpClient实例,常规的http连接请求可能会取消正在进行的一个。请确保它们不会同时发送请求,通过锁定对象或分离HttpClient实例。