Как заставить Openfire запрашивать подтверждение при отправке сообщения клиентам и, если его нет, возвращает сохранить как офлайн - PullRequest
0 голосов
/ 03 июня 2018

Надеюсь, у тебя хороший день.Мы долго ждали, пока 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);

1 Ответ

0 голосов
/ 08 июня 2018

Это ошибка, проверьте ее здесь:

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

Это официальная ошибка в Openfire.Вы можете установить интервал времени, по истечении которого пользователь отключается.Но в версиях> 4.0.2 есть ошибка, когда клиент всегда онлайн, независимо от установленного вами интервала времени.Я использую более старую версию 4.0.2 для своей установки Openfire, так как эта ошибка еще не исправлена.

Это причина, почему сообщения отправляются с другого клиента и теряются, потому что первый клиент отображается как онлайн, а на самом деле этонет и сообщение никогда не получит квитанцию ​​о доставке.

...