6

我得到了基于用户活动进行一些网络连接的应用程序。该应用程序发送的通常有效负载是 100-200 字节,因此基本上没有繁重的任务。这些任务通常没有任何问题(统计上 99.9% 或请求都很好),但除了这些网络活动之外,我的应用程序还将心跳发送回我们的服务器(位于 Amazon 的 EC2(us-east1- d 如果这很重要))。心跳每 10 秒作为普通的 POST 请求通过 HTTPS 发送一次——这对我来说并不真正有效,因为失败率比正常网络活动中观察到的要高得多——在我最近的 7 小时测试中,25% 的心跳请求失败(但我什至看到了 35% 的下降)而且它通常保持这个速度。当我禁用 SSL 时,我的测试设备上的错误率保持在 8%。如果这些故障属于任何模式(即每 4 次等,这可能意味着某些基于速率的过滤,或者会在接近每个整小时或一天的情况下失败,这可能意味着在某处设置了某种请求上限,那么这可能真的不是那么大的问题)。但是不会发生这样的事情 - 有时 10-15 个请求可能会连续失败,这对心跳不利。此外,更糟糕的是,目前我看到请求失败,我可以从同一设备连接到服务器,这可以正常工作)。此问题发生在任何受支持的 Android 版本 (2.2+) 上。但是不会发生这样的事情 - 有时 10-15 个请求可能会连续失败,这对心跳不利。此外,更糟糕的是,目前我看到请求失败,我可以从同一设备连接到服务器,这可以正常工作)。此问题发生在任何受支持的 Android 版本 (2.2+) 上。但是不会发生这样的事情 - 有时 10-15 个请求可能会连续失败,这对心跳不利。此外,更糟糕的是,目前我看到请求失败,我可以从同一设备连接到服务器,这可以正常工作)。此问题发生在任何受支持的 Android 版本 (2.2+) 上。

我使用最近的httpclientandroidlib来执行 HTTP 请求,所以我开始怀疑 lib 是罪魁祸首,所以我切换到Android 异步 HTTP 客户端,但它并没有真正改变。我主要得到以下例外:

NoHttpResponseException: 目标服务器响应失败 目标服务器响应失败 URL: https://xx.xx.xx.xx/heartbeat/

对于启用 SSL 的连接,还:

javax.net.ssl.SSLException:读取错误:ssl=0x784bc588:系统调用期间 I/O 错误,对等方重置连接读取错误:ssl=0x784bc588:系统调用期间 I/O 错误,对等方 URL 重置连接:https: //xx.xx.xx.xx/heartbeat/

我基本上想先追查罪魁祸首,所以知道该应用程序主要在移动网络上运行,我愿意接受任何关于如何进一步解决这个问题的建议,因为我现在有点卡住了。

4

2 回答 2

0

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

于 2013-11-07T20:08:43.857 回答
0

运行此应用程序,只需执行正常 ping 即可查看错误率: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 秒并快速失败,如果失败则重试。

于 2013-11-02T01:31:17.053 回答