Springboot WebSocket
@ServerEndpoint(“/ws/{userId}”)
@ServerEndpoint(“/ws/{userId}”) @Component public class WebSocketServer {
onlineCount
private static int onlineCount = 0;
ConcurrentHashMap
private static ConcurrentHashMap<String,WebSocketServer> webSocketMap = new ConcurrentHashMap<>();
ConcurrentHashMap<String, Session> sessionPool
private Session session; private String userId=“”;
@OnOpen
@OnOpen public void onOpen(Session session,@PathParam(“userId”) String userId) { this.session = session; this.userId=userId; if(webSocketMap.containsKey(userId)){ webSocketMap.remove(userId); }else{ webSocketMap.put(userId,this); addOnlineCount(); } try { sendMessage(“连接成功”); } catch (IOException e) { } }
@OnClose
@OnClose public void onClose() { if(webSocketMap.containsKey(userId)){ webSocketMap.remove(userId); subOnlineCount(); }
@OnMessage
@OnMessage public void onMessage(String message, Session session) { if(StringUtils.isNotBlank(message)){ try { JSONObject jsonObject = JSON.parseObject(message); jsonObject.put(“fromUserId”,this.userId); String toUserId=jsonObject.getString(“toUserId”); if(StringUtils.isNotBlank(toUserId)&&webSocketMap.containsKey(toUserId)){ webSocketMap.get(toUserId).sendMessage(jsonObject.toJSONString()); } }catch (Exception e){ e.printStackTrace(); } } }
@OnError
@OnError public void onError(Session session, Throwable error) { error.printStackTrace(); }
session.getBasicRemote()
public void sendMessage(String message) throws IOException { this.session.getBasicRemote().sendText(message); }
sendMessage
public static void sendMessage(String message,@PathParam(“userId”) String userId) throws IOException { if(StringUtils.isNotBlank(userId)&&webSocketMap.containsKey(userId)){ webSocketMap.get(userId).sendMessage(message); }else{ } }
api
public static synchronized int getOnlineCount() { return onlineCount; } public static synchronized void addOnlineCount() { WebSocketServer.onlineCount++; } public static synchronized void subOnlineCount() { WebSocketServer.onlineCount–; } }
参考: https://blog.csdn.net/printf88/article/details/123685995
|