@ServerEndpoint(“/ws/{userId}”)
@Component
public class WebSocketServer {
private static int onlineCount = 0;
ConcurrentHashMapprivate static ConcurrentHashMap
private Session session;
private String userId=“”;
@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
public void onClose() {
if(webSocketMap.containsKey(userId)){
webSocketMap.remove(userId);
subOnlineCount();
}
@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
public void onError(Session session, Throwable error) {
error.printStackTrace();
}
public void sendMessage(String message) throws IOException {
this.session.getBasicRemote().sendText(message);
}
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{ }
}
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



