【发布时间】:2015-07-22 20:40:52
【问题描述】:
我正在开发一个聊天应用程序,其中
- 我有一个持续运行的后台服务。
- 应用程序运行平稳,我能够毫无问题地接收和发送消息。
- 我正在使用默认的 Smack 4.1 重新连接管理器,它会在连接丢失时立即连接(几乎 90% 的时间)。
但有时,当连接丢失时,Smack 重新连接管理器会停止工作。
我无法找出导致此问题的原因。
查看手机时,延迟 12 到 14 小时后,我可以看到 Android 服务仍在运行,但 XMPP 重新连接已停止工作。然后我必须强制停止应用程序,然后重新启动服务并让它再次连接到 XMPP 服务器。
我的假设是当“电话网络从 Wifi-to-Data 或 Data-to-Wifi 切换”时发生。与此同时,Smack 4.1 Re-connection Manager 停止工作。虽然,我不确定。
我有问题
- PingManager 有什么用? PingManager 在这种情况下可以提供帮助吗?
- 什么是流管理?我该如何启用它?在这种情况下有用吗?
还有其他解决方案可以解决这个问题吗?我正在考虑以下解决方案:
- 将GCM也与XMPP一起使用,所以当XMPP重新连接失败时,我可以得到PUSH并在PUSH的基础上重新连接。
- 使用警报服务。 (问题:由于连接丢失而在队列中的消息将取决于下一个警报时间表)
- 每次用户返回应用程序时连接 XMPP。 (问题:由于连接丢失而在队列中的消息将取决于用户返回应用程序)
【问题讨论】:
-
我认为您应该按照解决方案 1 中的说明使用 GCM。它将解决您的连接丢失问题,并减少服务器负载和用户的移动流量。
-
@shanrais 你有我的确切问题,但我很失望看到没有答案:(你得到答案了吗?
-
我现在正在使用 GCM。
-
使用 PingManager 怎么样?您选择 GCM 而不是 PingManager 有什么特别的原因吗?我也想知道更多关于使用 GCM 的细节?什么触发了 GCM PUSH 消息?任何服务器端逻辑?
-
Smack 库对我来说总是有问题,II gae up 转移到另一个开源项目 Conversation..google.co.in/url?sa=t&source=web&rct=j&url=https://…
标签: java android sockets xmpp smack