我得到了基于用户活动进行一些网络连接的应用程序。该应用程序发送的通常有效负载是 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/
我基本上想先追查罪魁祸首,所以知道该应用程序主要在移动网络上运行,我愿意接受任何关于如何进一步解决这个问题的建议,因为我现在有点卡住了。