From 02e99e878911715d2785e371ae6fb576597578b0 Mon Sep 17 00:00:00 2001
From: luodangjia <luodangjia>
Date: 星期五, 09 八月 2024 09:34:49 +0800
Subject: [PATCH] 8.9
---
ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/sorcket/WebSocketServer.java | 56 +++++++++++++++++++++++++++++++++++---------------------
1 files changed, 35 insertions(+), 21 deletions(-)
diff --git a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/sorcket/WebSocketServer.java b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/sorcket/WebSocketServer.java
index 9381d84..98f4cfe 100644
--- a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/sorcket/WebSocketServer.java
+++ b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/sorcket/WebSocketServer.java
@@ -7,15 +7,15 @@
import javax.websocket.*;
import javax.websocket.server.PathParam;
-import javax.websocket.server.ServerEndpoint;
import java.io.IOException;
import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.atomic.AtomicInteger;
/**
* @author hjl
*/
-@ServerEndpoint(value = "/websocket/{workerId}")
+//@ServerEndpoint(value = "/websocket/{workerId}")
@Component
public class WebSocketServer {
@@ -24,7 +24,7 @@
/**
* 静态变量,用来记录当前在线连接数。应该把它设计成线程安全的。
*/
- private static int onlineCount = 0;
+ private static final AtomicInteger ONLINE_COUNT = new AtomicInteger(0);
/**
* concurrent包的线程安全Set,用来存放每个客户端对应的MyWebSocket对象
@@ -46,22 +46,31 @@
*/
@OnOpen
public void onOpen(Session session, @PathParam("workerId") String workerId) {
- this.session = session;
- this.userId = workerId;
- if (WEB_SOCKET_MAP.containsKey(workerId)) {
- WEB_SOCKET_MAP.remove(workerId);
- WEB_SOCKET_MAP.put(workerId, new WebSocketClient(session, workerId));
- //加入set中
+ if (null != workerId && !"".equals(workerId.trim())) {
+ this.session = session;
+ this.userId = workerId;
+ if (WEB_SOCKET_MAP.containsKey(workerId)) {
+ WEB_SOCKET_MAP.remove(workerId);
+ WEB_SOCKET_MAP.put(workerId, new WebSocketClient(session, workerId));
+ //加入set中
+ } else {
+ WEB_SOCKET_MAP.put(workerId, new WebSocketClient(session, workerId));
+ //加入set中
+ addOnlineCount();
+ }
+ log.info("用户 " + workerId + " 已连接: 当前在线人数为:" + getOnlineCount());
+ try {
+ sendMessage("socket连接成功!");
+ } catch (IOException e) {
+ log.error("用户:" + workerId + ",网络异常!!!!!!");
+ }
} else {
- WEB_SOCKET_MAP.put(workerId, new WebSocketClient(session, workerId));
- //加入set中
- addOnlineCount();
- }
- log.info("用户 " + workerId + " 已连接: 当前在线人数为:" + getOnlineCount());
- try {
- sendMessage("socket连接成功!");
- } catch (IOException e) {
- log.error("用户:" + workerId + ",网络异常!!!!!!");
+ log.info("用户 " + workerId + " 已连接: 当前在线人数为:" + getOnlineCount());
+ try {
+ sendMessage("socket连接失败!");
+ } catch (IOException e) {
+ log.error("用户:" + workerId + ",网络异常!!!!!!");
+ }
}
}
@@ -104,6 +113,11 @@
@OnError
public void onError(Session session, Throwable error) {
log.error("用户错误:" + this.userId + ",原因:" + error.getMessage());
+ if (WEB_SOCKET_MAP.containsKey(userId)) {
+ WEB_SOCKET_MAP.remove(userId);
+ //从set中删除
+ subOnlineCount();
+ }
error.printStackTrace();
}
@@ -129,14 +143,14 @@
}
public static synchronized int getOnlineCount() {
- return onlineCount;
+ return ONLINE_COUNT.get();
}
public static synchronized void addOnlineCount() {
- WebSocketServer.onlineCount++;
+ ONLINE_COUNT.incrementAndGet();
}
public static synchronized void subOnlineCount() {
- WebSocketServer.onlineCount--;
+ ONLINE_COUNT.decrementAndGet();
}
}
--
Gitblit v1.7.1