2014-04-04 54 views
1

我目前使用aSmack库为Android做XMPP客户端。如何同步两个用户之间的XMPP聊天线程?

我想知道的一件事是,如果两个用户分别与另一个人聊天,会发生什么? 例如,第一客户端会做:

connection.getChatManager().createChat("[email protected]", new MessageListener() { 
      @Override 
      public void processMessage(Chat arg0, Message arg1) { 
           //..... 
      } 
     }); 

和第二客户端会做:

connection.getChatManager().createChat("[email protected]", new MessageListener() { 
      @Override 
      public void processMessage(Chat arg0, Message arg1) { 
           //..... 
      } 
     }); 

会不会有在服务器上的两个聊天实例,因此消息监听器不会回暖任何消息,因为他们将来自不同的聊天?

或者服务器会自动将聊天线程同步为一个,所以消息侦听器将正常工作,并能够截获传入消息?

如果这是第一种情况,那么有什么可能的解决方案来解决这个问题,以便将聊天合并为一个?

编辑:我刚刚试过一个快速示例,它似乎是第一个案例,但我不确定是否因为我做了不正确的事情。

回答

1

XMPP服务器不知道您在示例中创建的两个聊天线程,因此无法同步它们。这是设计。 XMPP聊天只是一组具有相同线程ID的消息节。

我推荐阅读RFC 6121 5.2.1

+0

谢谢你的推荐阅读!它帮助我们清除了很多事情。但是,我仍然无法找到解决问题的恰当方法。那么,我确实有一个解决方案,但我想看看这是否是正确的做法。实际上,当用户重新制作应用程序时,如果他先发送消息(涉及创建新的聊天),那么我使用从聊天监听器获得的聊天实例覆盖其他客户端中的聊天实例。如果他首先收到一条消息,那么我会覆盖他自己新创建的与另一个用户的客户端仍然引用的聊天。这是一个合适的解决方案吗? – Pat

+0

另一种解决方案是使用 id来引用聊天记录,但我不确定它的可靠性或独特性。 – Pat

+0

你是如何解决你的问题的? – user2924714