我希望你今天过得愉快。我们等待了很长一段时间才让Openfire实现StreamManagement
功能,现在我们可以运行它了。然而,Openfire中数据包丢失的实际问题场景仍然保持不变。
客户端断开了与互联网的连接,但由于是在Openfire发送下一个ping之前,服务器假定客户端已连接并发送消息,这显然是在没有请求客户端确认的情况下发生的。因此,如果它没有发送任何内容,则将其保存为脱机。
我已经尝试了很多方法来解决这个问题(使用StreamManagement
和_Resumption_
),我能想到的最后一件事是在服务器端编写一个插件,并手动完成所有关于存储离线消息的工作,这将需要很长时间。但我仍然认为这应该有一个解决方案,否则,Openfire是没有用的,不是吗?有没有人能帮我解决这个问题?非常感谢。
另外,我想知道,Openfire不是使用TCP来保持活力的吗?那么,当客户端立即断开连接时,它不应该注意到吗?
我用smack启动连接的方法
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);
发布于 2018-06-08 22:41:50
这是一个BUG,在这里检查它:
https://issues.igniterealtime.org/browse/OF-963
这是Openfire的官方Bug。您可以设置时间间隔,在此时间间隔后,用户将设置为脱机。但在4.0.2以上的版本中,无论设置的时间间隔是多少,客户端始终处于在线状态。我的Openfire安装使用的是4.0.2版的老版本,因为这个BUG还没有修复。
这就是为什么消息从另一个客户端发送并丢失的原因,导致第一个客户端显示为在线,但实际上并非如此,并且消息从未收到递送的回执。
https://stackoverflow.com/questions/50668206
复制相似问题