我希望你今天过得愉快。我们等了很长时间,让 Openfire 实现StreamManagement
功能,现在我们已经运行了它。但是,Openfire中丢包的实际问题场景仍然保持不变。
客户端与互联网断开连接,但由于是在 Openfire 发送下一个 ping 之前,服务器假定客户端已连接并发送消息,这显然是在没有请求客户端确认的情况下发生的。因此,如果它没有发送任何内容,请将其另存为脱机。
我已经尝试了很多方法来解决这个问题(玩弄StreamManagement
和_Resumption_
(,我能想到的最后一件事是在服务器端编写一个插件并手动存储离线消息,这将需要很长时间。但我仍然认为这应该有一个解决方案,否则,Openfire是没有用的,不是吗?如果有任何解决方案,有人可以帮我吗?多谢。
另外,我想知道,Openfire不使用TCP来维持生命吗?那么,每当客户端立即断开连接时,它不应该注意到吗?
我启动连接的方式是:
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);
这是一个错误,在这里检查它:
https://issues.igniterealtime.org/browse/OF-963
这是Openfire中的官方错误。您可以设置将用户设置为脱机的时间间隔。但是在 4.0.2>版本中,存在客户端始终在线的错误,无论 u 设置的时间间隔如何。我使用旧版本恰好是 4.0.2 进行 Openfire 安装,因为这个错误尚未修复。
这就是为什么消息从另一个客户端发送并丢失的原因,导致第一个客户端显示为在线,而实际上并非如此,并且消息永远不会收到要传递的收据。