如何在Android中创建服务与XMPP服务器保持持久的Xmpp连接?

时间:2014-09-28 07:39:59

标签: android xmpp asmack

在互联网上搜索了很多内容之后,我们得出了一个结论,以确保持久 XMPP 服务器的连接,我们必须创建服务,

我们创建了一个使用Smack库与 XMPP 服务器连接的服务器,它可以与移动和Wi-Fi网络一起使用。

每次你做出一些设计方法总是很重要!!!,Smack已经隐藏地实现了这个重新连接机制,在那里监听连接,如果连接丢失,Smack尝试重新连接 XMPP 服务器一段时间。

我们的用例场景::
                       INTERNET连接可以是因为wifi或数据网络,这里如果连接转是空闲状态有人关闭屏幕cpu进入睡眠现在任何数据都发送到服务器上这个连接将没有响应因为服务器不再听取客户端,在客户端 XMPP 连接已连接模式连接侦听器未检测到与服务器的任何断开连接,因此此处流程已完成。

在INTERNET上搜索后,我们发现解决这个问题的可能解决办法是在修复后ping服务器(我们使用1分钟作为修复周期),检测到ping失败后,我们实现了与smack相同的重新连接机制(想法取自通过利用计时器任务来重新连接机制本身。

问题::我们唯一的问题是电池耗尽,如果用户仍与INTERNET连接并且重新连接间隔增加,则会导致电池耗尽。

1)。上述问题的可能解决方案是什么?

2)。我们应该采取另一种方法吗?

1 个答案:

答案 0 :(得分:6)

  

如何在Android中创建服务,使其保持持久的Xmpp连接   使用XMPP服务器?

两件事

  1. 通过侦听CONNECTIVITY_CHANGED意图重新建立连接,并确定当前使用的数据连接是否已关闭(并被其他连接替换)。
  2. 确保通过ping服务器建立连接
  3. 关于

    的备注
    1. 听取CONNECTIVY_CHANGED是不够的,您需要将先前活动的连接与现在活动的连接进行比较。如果不一样,请重新建立XMPP连接。
    2. Smack 4.1附带ServerPingWithAlarmManager,它将根据PingManager 每30分钟的设置检查是否需要ping。此值是硬编码的,无法更改。
    3. 使用1分钟作为Ping间隔是很多!正如您所经历的那样,它会非常快地耗尽电池电量。合理的ping间隔是> 15分钟,我建议30分钟。 Smack 4.1还将确保只有在没有收到带有Ping间隔的节的情况下才会发送ping。

      尽可能使用XEP-0198:流管理。

      我建议您查看遵循这些指南的各种开源应用,并在不消耗用户电池的情况下实现稳定,永久的连接 1

      1:遵循这些建议不能保证电池耗尽。还有更多因素需要考虑。