java - 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();
解决方案
推荐阅读
- android - 如何转换作为字符串的日期并在android中分配一些格式
- python - 基于具有序列的列条目转置数据帧
- r - 仅在闪亮的应用程序中准备好表格输出时才显示框
- arrays - 滚动时如何在tableview中添加20 -20行的循环?
- plsql - 具有联合的 harcode 行
- postgresql - 相当于 PostgreSQL 中的 UNIQUE IDENTIFIER
- php - 为什么php不能打印mysql数据库中的数据?
- ios - 调用注释来填充 TableView:更正代码错误
- php - php 类到 Json 预计只返回设置值
- c# - 为什么找不到程序集的模块?