【问题标题】:How to synchronize XMPP chat threads between two users?如何在两个用户之间同步 XMPP 聊天线程?
【发布时间】:2014-05-16 14:56:07
【问题描述】:

我目前正在使用 aSmack 库为 Android 做一个 XMPP 客户端。

我想知道的一件事是,如果两个用户各自创建与另一个人的聊天会发生什么? 例如第一个客户会这样做:

    connection.getChatManager().createChat("testing2@testing.com", new MessageListener() {
            @Override
            public void processMessage(Chat arg0, Message arg1) {
                                //.....
            }
        });

第二个客户会这样做:

    connection.getChatManager().createChat("testing1@testing.com", new MessageListener() {
            @Override
            public void processMessage(Chat arg0, Message arg1) {
                                //.....
            }
        });

服务器上是否会有两个聊天实例,因此消息侦听器不会接收任何消息,因为它们将来自不同的聊天?

或者服务器会自动将聊天线程同步为一个,这样消息监听器就会正常工作并能够拦截传入的消息?

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

编辑:我刚刚在一个简单的示例中尝试过,这似乎是第一种情况,但我不确定是不是因为我做错了。

【问题讨论】:

    标签: xmpp smack asmack


    【解决方案1】:

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

    我推荐阅读RFC 6121 5.2.1

    【讨论】:

    • 感谢您的推荐阅读!它帮助我们清除了很多东西。但是我仍然无法确定问题的适当解决方案。好吧,我确实有一个解决方案,但我想看看这是否是正确的做法。本质上,当用户重新启动应用程序时,如果他首先发送一条消息(这涉及创建一个新的聊天),那么我会用我从聊天侦听器获得的那个覆盖另一个客户端中的聊天实例。如果他首先收到一条消息,那么我会覆盖他自己新创建的聊天,而另一个用户的客户端仍然引用该聊天。这会是一个合适的解决方案吗?
    • 另一种解决方案是使用 id 来引用聊天,但我不确定它的可靠性或独特性。
    猜你喜欢
    • 2011-11-04
    • 1970-01-01
    • 2015-05-02
    • 2012-01-28
    • 1970-01-01
    • 2012-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多