Browse Source

websocket发送消息TEXT_FULL_WRITING问题

zhc
review512jwy@163.com 1 month ago
parent
commit
4f57fdc934
  1. 19
      data-center-business-service/src/main/java/com/techsor/datacenter/business/service/config/websocket/WebSocketServer.java

19
data-center-business-service/src/main/java/com/techsor/datacenter/business/service/config/websocket/WebSocketServer.java

@ -27,6 +27,8 @@ public class WebSocketServer {
private static Logger logger = LoggerFactory.getLogger(WebSocketServer.class); private static Logger logger = LoggerFactory.getLogger(WebSocketServer.class);
private final Map<String, Object> sessionSendLocks = new ConcurrentHashMap<>();
/** /**
* 静态变量用来记录当前在线连接数线程安全的类 * 静态变量用来记录当前在线连接数线程安全的类
*/ */
@ -143,19 +145,18 @@ public class WebSocketServer {
// logger.info("服务端给客户端发送消息 ==> toSid = {}, message = {}", toUid, message); // logger.info("服务端给客户端发送消息 ==> toSid = {}, message = {}", toUid, message);
// toSession.getAsyncRemote().sendText(message); // toSession.getAsyncRemote().sendText(message);
// 异步发送 // 异步发送
// 每个 Session 一个锁
Object lock = sessionSendLocks.computeIfAbsent(
toUid, k -> new Object()
);
synchronized (lock) {
try { try {
logger.info("服务端给客户端发送消息 ==> toSid = {}, message = {}", toUid, message); logger.info("服务端给客户端发送消息 ==> toSid = {}, message = {}", toUid, message);
// 确保 WebSocket 状态正常
if (toSession.isOpen()) {
toSession.getAsyncRemote().sendText(message); toSession.getAsyncRemote().sendText(message);
} else {
logger.warn("WebSocket 状态不正常,不能发送消息 ==> toSid = {}", toUid);
}
} catch (IllegalStateException e) {
logger.error("发送消息时出现错误 ==> toSid = {}, message = {}", toUid, message, e);
} catch (Exception e) { } catch (Exception e) {
logger.error("发送消息时出现未知错误 ==> toSid = {}, message = {}", toUid, message, e); logger.error("发送消息失败 ==> toSid = {}, message = {}", toUid, message, e);
}
} }
} }

Loading…
Cancel
Save