2014-04-04 92 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