Smack XMPP - соединение больше не подключено. done = true smResumpPossible = false - PullRequest
0 голосов
/ 09 ноября 2018

Я использую Java-библиотеку Smack (версия 4.3.1) (JDK 8). После некоторого случайного времени я иногда получаю следующее исключение. Есть ли способ избежать этого?

org.jivesoftware.smack.SmackException$NotConnectedException: The connection [...] (117) is no longer connected. done=true smResumptionPossible=false at
org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketWriter.throwNotConnectedExceptionIfDoneAndResumptionNotPossible(XMPPTCPConnection.java:1320) at
org.jivesoftware.smack.tcp.XMPPTCPConnection.throwNotConnectedExceptionIfAppropriate(XMPPTCPConnection.java:359) at 
org.jivesoftware.smack.AbstractXMPPConnection.sendStanza(AbstractXMPPConnection.java:688)  

XMPPTCPConnectionConfiguration:

XMPPTCPConnectionConfiguration.builder(
        ).setSecurityMode(
            ConnectionConfiguration.SecurityMode.disabled
        ).setXmppDomain(
            this.domain
        ).setHostAddress(
            InetAddress.getByName(
                this.host
            )
        )
        .allowEmptyOrNullUsernames(
        ).performSaslAnonymousAuthentication(
        ).build();

Соединение XMPPTCP:

conn.setReplyTimeout(30 * 1000);
conn.setUseStreamManagement(true);
conn.setUseStreamManagementResumption(true);
conn.connect();
conn.login();

Центральные артефакты Maven:

    <artifactId>smack-core</artifactId>
    <version>4.3.1</version>

    <artifactId>smack-tcp</artifactId>
    <version>4.3.1</version>

    <artifactId>smack-extensions</artifactId>
    <version>4.3.1</version>

    <artifactId>smack-java7</artifactId>
    <version>4.3.1</version>

    <artifactId>smack-resolver-dnsjava</artifactId>
    <version>4.3.1</version>

Дополнительная информация: Дело в том, что conn.isConnected возвращает истину. Внутри, перед отправкой строфы (conn.sendStanza), Smack выполняет следующие проверки: Если (conn.isConnected), то если (conn.isSmResumptionPossible), то sendStanza(). Если conn.isSmResumptionPossible() возвращает ложь, то генерируется исключение, которое я получаю.

1 Ответ

0 голосов
/ 09 ноября 2018

Установите прослушиватель соединения и переподключите, если обратный вызов слушателя сообщит вам, что соединение разорвано.

...