首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何强制Openfire在向客户端发送消息时请求确认,如果没有,则返回保存为脱机

如何强制Openfire在向客户端发送消息时请求确认,如果没有,则返回保存为脱机
EN

Stack Overflow用户
提问于 2018-06-03 23:50:53
回答 1查看 188关注 0票数 0

我希望你今天过得愉快。我们等待了很长一段时间才让Openfire实现StreamManagement功能,现在我们可以运行它了。然而,Openfire中数据包丢失的实际问题场景仍然保持不变。

客户端断开了与互联网的连接,但由于是在Openfire发送下一个ping之前,服务器假定客户端已连接并发送消息,这显然是在没有请求客户端确认的情况下发生的。因此,如果它没有发送任何内容,则将其保存为脱机。

我已经尝试了很多方法来解决这个问题(使用StreamManagement_Resumption_),我能想到的最后一件事是在服务器端编写一个插件,并手动完成所有关于存储离线消息的工作,这将需要很长时间。但我仍然认为这应该有一个解决方案,否则,Openfire是没有用的,不是吗?有没有人能帮我解决这个问题?非常感谢。

另外,我想知道,Openfire不是使用TCP来保持活力的吗?那么,当客户端立即断开连接时,它不应该注意到吗?

我用smack启动连接的方法

代码语言:javascript
复制
 connInter.getConnection().setReplyTimeout(15000);

    connInter.getConnection().setUseStreamManagement(true);
    //connInter.getConnection().strea
    connInter.getConnection().setUseStreamManagementResumption(true);

    registerReceiver(mConnReceiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));

    DeliveryReceiptManager
        .getInstanceFor(connInter.getConnection())
            .setAutoReceiptMode(AutoReceiptMode.always);

    ReconnectionManager.setEnabledPerDefault(false);

    SASLMechanism mechanism = new SASLDigestMD5Mechanism();
    SASLAuthentication.registerSASLMechanism(mechanism);
    // SASLAuthentication.blacklistSASLMechanism("SCRAM-SHA-1");
    SASLAuthentication.unBlacklistSASLMechanism("DIGEST-MD5");

    PingManager.setDefaultPingInterval(180);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-08 22:41:50

这是一个BUG,在这里检查它:

https://issues.igniterealtime.org/browse/OF-963

这是Openfire的官方Bug。您可以设置时间间隔,在此时间间隔后,用户将设置为脱机。但在4.0.2以上的版本中,无论设置的时间间隔是多少,客户端始终处于在线状态。我的Openfire安装使用的是4.0.2版的老版本,因为这个BUG还没有修复。

这就是为什么消息从另一个客户端发送并丢失的原因,导致第一个客户端显示为在线,但实际上并非如此,并且消息从未收到递送的回执。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50668206

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档