ejabberd Online-Status, wenn der Benutzer die Verbindung verliert

Ich habe ejabberd eingerichtet, um der xmpp-Server zwischen mobilen Apps zu sein, dh. benutzerdefinierte iPhone und Android App.

Aber ich bin anscheinend auf eine Einschränkung der Art gestoßen, wie Ejabberd mit Online-Status umgeht.

Szenario:

Benutzer A sendet Nachrichten an Benutzer B über sein Mobiltelefon.Benutzer B verliert die gesamte Konnektivität, sodass der Client die Verbindung zum Server nicht trennen kann.ejabberd listet Benutzer B weiterhin als online auf.Da ejabberd davon ausgeht, dass Benutzer B noch online ist, wird jede Nachricht von Benutzer A an die tote Verbindung weitergeleitet.Daher wird die Nachricht weder von Benutzer B abgerufen noch als Offline-Nachricht gespeichert, da ejabberd davon ausgeht, dass der Benutzer online ist.Nachricht verloren.Bis ejabberd feststellt, dass die Verbindung veraltet ist, wird sie als Online-Benutzer behandelt.

Und wenn Sie die Datenverbindung ändern (WLAN zu 3G zu 4G zu ...), werden Sie feststellen, dass dies ziemlich häufig vorkommt.

mod_ping:

Ich habe versucht, mod_ping in einem 10-Sekunden-Intervall zu implementieren.
https://www.process-one.net/docs/ejabberd/guide_en.html#modping
Wie in der Dokumentation angegeben, wartet der Ping-Befehl 32 Sekunden auf eine Antwort, bevor die Verbindung zum Benutzer getrennt wird.
Dies bedeutet, dass ein 42-Sekunden-Fenster angezeigt wird, in dem der Benutzer seine Nachrichten verlieren kann.

Ideale Lösung:

Auch wenn die Ping-Wartezeit verkürzt werden könnte, ist dies keine perfekte Lösung.
Gibt es eine Möglichkeit, dass ejabberd auf eine Antwort des Clients von 200 warten kann, bevor die Nachricht verworfen wird? Wenn Sie keine Antwort erhalten, speichern Sie sie offline.
Ist es möglich, einen Haken zu schreiben, um dieses Problem zu lösen?
Oder gibt es eine einfache Einstellung, die ich irgendwo vermisst habe?

Zu Ihrer Information: Ich benutze BOSH nicht.

Antworten auf die Frage(6)

Ihre Antwort auf die Frage