Надеюсь, у тебя хороший день.Мы долго ждали, пока Openfire реализует возможность StreamManagement
, и теперь она запущена.Тем не менее, реальная проблема сценария потери пакетов в Openfire осталась прежней.
Клиент отключается от Интернета, но, поскольку это было до того, как Openfire отправил свой следующий пинг, сервер предполагает, что клиент подключен, и отправляет сообщение, что, по-видимому, происходит без запроса подтверждения от клиента.Поэтому, если он не отправлял, сохраните его как офлайн.
Я много чего пробовал исправить (поиграл с 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);