|
@@ -1,5 +1,6 @@
|
|
|
package com.ktg.framework.websocket;
|
|
package com.ktg.framework.websocket;
|
|
|
|
|
|
|
|
|
|
+import java.util.concurrent.ConcurrentHashMap;
|
|
|
import java.util.concurrent.Semaphore;
|
|
import java.util.concurrent.Semaphore;
|
|
|
import javax.websocket.OnClose;
|
|
import javax.websocket.OnClose;
|
|
|
import javax.websocket.OnError;
|
|
import javax.websocket.OnError;
|
|
@@ -26,7 +27,7 @@ import org.springframework.stereotype.Component;
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
* websocket 消息处理
|
|
* websocket 消息处理
|
|
|
- *
|
|
|
|
|
|
|
+ *
|
|
|
* @author ruoyi
|
|
* @author ruoyi
|
|
|
*/
|
|
*/
|
|
|
@Component
|
|
@Component
|
|
@@ -46,12 +47,22 @@ public class WebSocketServer
|
|
|
|
|
|
|
|
private static Semaphore socketSemaphore = new Semaphore(socketMaxOnlineCount);
|
|
private static Semaphore socketSemaphore = new Semaphore(socketMaxOnlineCount);
|
|
|
|
|
|
|
|
|
|
+ /**静态变量,用来记录当前在线连接数。应该把它设计成线程安全的。*/
|
|
|
|
|
+ private static int onlineCount = 0;
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * concurrent包的线程安全set,用来存放每个客户端对应的MyWebSocket对象
|
|
|
|
|
+ */
|
|
|
|
|
+ private static ConcurrentHashMap<String,WebSocketServer> webSocketMap = new ConcurrentHashMap();
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
/**
|
|
/**
|
|
|
* 连接建立成功调用的方法
|
|
* 连接建立成功调用的方法
|
|
|
*/
|
|
*/
|
|
|
@OnOpen
|
|
@OnOpen
|
|
|
public void onOpen(Session session,@PathParam("token") String token) throws Exception
|
|
public void onOpen(Session session,@PathParam("token") String token) throws Exception
|
|
|
{
|
|
{
|
|
|
|
|
+ LOGGER.info("[连接token:{}] 建立连接, 当前连接数:{}", token, webSocketMap.size());
|
|
|
boolean semaphoreFlag = false;
|
|
boolean semaphoreFlag = false;
|
|
|
//身份验证
|
|
//身份验证
|
|
|
if(!StringUtils.isNotNull(token)){
|
|
if(!StringUtils.isNotNull(token)){
|
|
@@ -78,6 +89,14 @@ public class WebSocketServer
|
|
|
}
|
|
}
|
|
|
else
|
|
else
|
|
|
{
|
|
{
|
|
|
|
|
+ if (webSocketMap.containsKey(token)) {
|
|
|
|
|
+ webSocketMap.remove(token);
|
|
|
|
|
+ webSocketMap.put(token,this);
|
|
|
|
|
+ } else {
|
|
|
|
|
+ webSocketMap.put(token,this);
|
|
|
|
|
+ addOnlineCount();
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
// 添加用户
|
|
// 添加用户
|
|
|
WebSocketUsers.put(user.getUsername(), session);
|
|
WebSocketUsers.put(user.getUsername(), session);
|
|
|
LOGGER.info("\n 建立连接 - {}", session);
|
|
LOGGER.info("\n 建立连接 - {}", session);
|
|
@@ -139,4 +158,18 @@ public class WebSocketServer
|
|
|
LOGGER.debug("\n 收到客户端发送的消息 - {}", message);
|
|
LOGGER.debug("\n 收到客户端发送的消息 - {}", message);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 当前连接数加一
|
|
|
|
|
+ */
|
|
|
|
|
+ public static synchronized void addOnlineCount() {
|
|
|
|
|
+ WebSocketServer.onlineCount++;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 当前连接数减一
|
|
|
|
|
+ */
|
|
|
|
|
+ public static synchronized void subOnlineCount() {
|
|
|
|
|
+ WebSocketServer.onlineCount--;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
}
|
|
}
|