package com.ruoyi.system.websocket;
|
|
import java.util.concurrent.Semaphore;
|
import javax.websocket.OnClose;
|
import javax.websocket.OnError;
|
import javax.websocket.OnMessage;
|
import javax.websocket.OnOpen;
|
import javax.websocket.Session;
|
import javax.websocket.server.PathParam;
|
import javax.websocket.server.ServerEndpoint;
|
import org.slf4j.Logger;
|
import org.slf4j.LoggerFactory;
|
import org.springframework.stereotype.Component;
|
|
/**
|
* websocket 消息处理
|
*
|
* @作者 ruoyi
|
*/
|
@Component
|
@ServerEndpoint("/websocket/message/{clientType}")
|
public class WebSocketServer {
|
|
private static final Logger LOGGER = LoggerFactory.getLogger(WebSocketServer.class);
|
public static int socketMaxOnlineCount = 1000;
|
private static Semaphore socketSemaphore = new Semaphore(socketMaxOnlineCount);
|
|
@OnOpen
|
public void onOpen(Session session, @PathParam("clientType") Integer clientType)
|
throws Exception {
|
boolean semaphoreFlag = false;
|
semaphoreFlag = SemaphoreUtils.tryAcquire(socketSemaphore);
|
if (!semaphoreFlag) {
|
LOGGER.error("\n 当前在线人数超过限制数- {}", socketMaxOnlineCount);
|
WebSocketUsers.sendMessageToUserByText(session,
|
"当前在线人数超过限制数:" + socketMaxOnlineCount);
|
session.close();
|
} else {
|
WebSocketUsers.put(session.getId(), session, clientType);
|
|
if (clientType == 1) {
|
LOGGER.info("\n 用户端建立连接 - {}", session);
|
WebSocketUsers.sendMessageToUserByText(session, "用户端连接成功");
|
} else if (clientType == 2) {
|
LOGGER.info("\n 拍卖师端建立连接 - {}", session);
|
WebSocketUsers.sendMessageToUserByText(session, "拍卖师端连接成功");
|
}
|
LOGGER.info("\n 当前人数 - {}", WebSocketUsers.getUsers().size());
|
}
|
}
|
|
@OnClose
|
public void onClose(Session session) {
|
LOGGER.info("\n 关闭连接 - {}", session);
|
WebSocketUsers.remove(session.getId());
|
SemaphoreUtils.release(socketSemaphore);
|
}
|
|
@OnError
|
public void onError(Session session, Throwable exception) throws Exception {
|
if (session.isOpen()) {
|
session.close();
|
}
|
String sessionId = session.getId();
|
LOGGER.info("\n 连接异常 - {}", sessionId);
|
LOGGER.info("\n 异常信息 - {}", exception);
|
WebSocketUsers.remove(sessionId);
|
SemaphoreUtils.release(socketSemaphore);
|
}
|
|
@OnMessage
|
public void onMessage(String message, Session session) {
|
String msg = message.replace("你", "我").replace("吗", "").replace("PING", "PONG")
|
.replace("ping", "pong");
|
WebSocketUsers.sendMessageToUserByText(session, msg);
|
}
|
}
|