首页 > 解决方案 > WebSocketListener OnMessage 被阻止并且其他传入消息被排队

问题描述

我已经使用 okhttp 3.5.0 实现了 websocket 客户端来连接到 spring websocket 服务器。

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();

标签: javawebsocketokhttpokhttp3

解决方案


推荐阅读