Проблема переподключения Websocket, когда Wi-Fi выключился и снова включился - PullRequest
0 голосов
/ 10 января 2020

У меня проблема с переподключением websocket. При первом запуске приложения не возникает проблем с созданием соединения через веб-сокет. Затем я выключил Wi-Fi, и через несколько секунд я снова включил Wi-Fi, и я получил следующее исключение в моем обратном вызове onFailure.

WS onFailure javax.net.ssl.SSLException: Read error: ssl=0xbf4618c0: I/O error during system call, Software caused connection abort
    E/Mqtt: WS onFailure java.io.InterruptedIOException: executor rejected
E/Mqtt: WS onFailure java.io.InterruptedIOException: executor rejected
E/Mqtt: WS onFailure java.io.InterruptedIOException: executor rejected
E/Mqtt: WS onFailure java.io.InterruptedIOException: executor rejected
E/Mqtt: WS onFailure java.io.InterruptedIOException: executor rejected

Вот мой метод подключения:

public fun connect()
{
    if(mConnecting)
        return

    mConnecting = true

    val request = Request.Builder().url(mSocketUrl).build()

    mWebSocket = mOkHttpClient.newWebSocket(request, this)
    mOkHttpClient.dispatcher().executorService().shutdown()

}

Вот обратный вызов websocket onFailure

override fun onFailure(webSocket: WebSocket?, t: Throwable, response: Response?)
{
    Log.e(TAG, "WS onFailure $t")

    mConnecting = false
    reconnect()
}

, а вот мой метод переподключения

    public fun reconnectMqtt()
    {
        if(mStopping)
            return

        if(mMqttConnection == null)
        {
            startMqtt()
            return
        }

        if(!mMqttConnection!!.mConnecting)
        {
//            mMqttConnection = null
//            startMqtt()

            Handler(Looper.getMainLooper()).postDelayed({
                mMqttConnection!!.connect()
            }, 1000)
        }
    }

Я много искал, но ничего не помогало. любая помощь будет оценена. Заранее спасибо !!

1 Ответ

0 голосов
/ 13 января 2020

Проблема была с этой строкой в ​​методе подключения.

mOkHttpClient.dispatcher().executorService().shutdown()

метод выключения не позволял мне повторно подключить websocket. это необходимо для освобождения ресурсов. я перекладываю этот вызов метода на сервис onDestroy.

...