Browse Source

websocket发送消息TEXT_FULL_WRITING问题

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

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

@ -26,7 +26,9 @@ import org.springframework.stereotype.Component;
public class WebSocketServer { 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);
// 异步发送 // 异步发送
try { // 每个 Session 一个锁
logger.info("服务端给客户端发送消息 ==> toSid = {}, message = {}", toUid, message); Object lock = sessionSendLocks.computeIfAbsent(
toUid, k -> new Object()
// 确保 WebSocket 状态正常 );
if (toSession.isOpen()) {
synchronized (lock) {
try {
logger.info("服务端给客户端发送消息 ==> toSid = {}, message = {}", toUid, message);
toSession.getAsyncRemote().sendText(message); toSession.getAsyncRemote().sendText(message);
} else { } catch (Exception e) {
logger.warn("WebSocket 状态不正常,不能发送消息 ==> toSid = {}", toUid); logger.error("发送消息失败 ==> toSid = {}, message = {}", toUid, message, e);
} }
} catch (IllegalStateException e) {
logger.error("发送消息时出现错误 ==> toSid = {}, message = {}", toUid, message, e);
} catch (Exception e) {
logger.error("发送消息时出现未知错误 ==> toSid = {}, message = {}", toUid, message, e);
} }
} }

Loading…
Cancel
Save