【问题标题】:Handle asynchronous messages in ejabberd在 ejabberd 中处理异步消息
【发布时间】:2016-08-19 21:38:57
【问题描述】:

我有 ejabberd 作为我的本地服务器,smack 作为 android 端 api。

当用户上线并且有许多离线消息要传递时,ejabberd 服务器只是将消息淹没我。我收到了每条消息,但顺序并不完美。 消息在服务器中发送和保存的顺序不是我接收消息的方式。

我可以通过 OfflineMessageManager 类处理 smack 上的离线消息。但这在 ejabberd 中不受支持。我用supportsFlexibleRetrieval()检查它,它返回false。

我还使用Xabber android 应用程序对其进行了检查,令人惊讶的是,我从 ejabberd 服务器以正确的顺序获取了所有消息。所以问题出在我的android客户端。我的接收器如下-

PacketListener myListener;
String new_msg_body, new_msg_from;

final StanzaFilter filter = new AndFilter(new StanzaTypeFilter(Message.class));

        PacketCollector myCollector = conn1.createPacketCollector(filter);

        myListener = new PacketListener() {
            @Override
            public void processPacket(Stanza packet) throws SmackException.NotConnectedException {
                Message msg = (Message) packet;
                new_msg_body = msg.getBody();
                new_msg_from = msg.getFrom();
                Log.i("log", "message recived :" + new_msg_body + " from : " + new_msg_from +" msg id : " + msg.getStanzaId());
            }
        };

        conn1.addPacketListener(myListener, filter);

有人对这个问题有什么建议吗。

进展

到目前为止,我发现每条消息都有其id,并且每条消息的 id 都是按发送时间排列的。所以我可以在这里进行排序以按顺序获取消息。

知道每个收到的数据包都会触发它自己的接收器实例。这将使设备一次充满大量消息。这可能会导致问题。

【问题讨论】:

    标签: java android ejabberd smack


    【解决方案1】:

    ejabberd 16.02 或最新版本支持灵活离线消息检索(XEP-0013)。下载并安装最新版本的 ejabberd。 check this link

    【讨论】:

    • 嘿。感谢您的回复。你能告诉我如何获取我正在使用的 ejabberd 服务器的当前版本吗?
    • 您可以使用 sudo ejabberdctl status 输出获取版本---- 节点 'ejabberd@localhost.com' 以状态启动:已启动 ejabberd 16.02 在该节点中运行
    • sudo ejabberdctl status(如果从源代码安装则有效)否则在我的情况下使用 sudo /opt/ejabberd-16.02/bin/ejabberdctl status
    • 会试一试。
    【解决方案2】:

    XEP-0013:灵活的离线消息检索是从 2003 年开始的,也许是时候转向更现代的 XEP-0313: Message Archive Management 了?对于多设备环境来说,它要好得多,例如同时使用移动和网络应用程序。

    MongooseIM 强烈支持MAM:MongooseIM 1.6.2 支持 MAM v0.2,但我们的 master 分支(下一个版本)支持 MAM v0.5.1。您可以将消息存档存储在 MySQL、PostgreSQL、Riak KV 和 Cassandra 中!

    【讨论】:

    • XEP-0013 和 XEP-0313 解决不同的问题。提问者问题由 XEP-0013 解决,而不是 XEP-0313。
    猜你喜欢
    • 1970-01-01
    • 2017-02-12
    • 2016-08-26
    • 1970-01-01
    • 1970-01-01
    • 2011-09-14
    • 1970-01-01
    • 1970-01-01
    • 2021-07-04
    相关资源
    最近更新 更多