WebSocketListener OnMessage блокируется, а другие входящие сообщения ставятся в очередь - PullRequest
0 голосов
/ 10 апреля 2019

Я реализовал клиент websocket, используя okhttp 3.5.0 для подключения к весеннему серверу websocket.

После успешного подключения веб-сокета к серверу я подписываюсь на несколько тем, чтобы получать уведомления от сервера. При получении уведомления, если обработка этого сообщения в функции OnMessage занимает много времени, я заметил, что другие входящие сообщения с сервера ставятся в очередь и ожидают завершения первого сообщения.

Есть ли способ сделать функцию WebSocketListener OnMessage параллельной, чтобы входящие сообщения не ожидали завершения каких-либо других старых сообщений?

Я попытался делегировать обработку сообщений в отдельный поток, и это решило проблему блокировки onMessage, но я хочу знать, есть ли другой способ добиться того же.

Это мой код для создания клиента websocket

OkHttpClient client = new OkHttpClient.Builder()
            .readTimeout(0, TimeUnit.MILLISECONDS).sslSocketFactory(sslSocketFactory, trustManager)
            .build();

    Request request = new Request.Builder()
            .url(url)
            .build();
    WebSocketListenerExtension webSocketListenerExtension = new WebSocketListenerExtension();
    client.newWebSocket(request, webSocketListenerExtension);
    // Trigger shutdown of the dispatcher's executor so this process can exit cleanly.
    client.dispatcher().executorService().shutdown();
...