SpringBoot 集成webSocket
pom依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
添加 WebSocketConfig配置
@Configuration
public class WebSocketConfig {
@Bean
public ServerEndpointExporter serverEndpointExporter(){
return new ServerEndpointExporter();
}
}
添加 WebSocketServer配置
@ServerEndpoint("/websocket/{sid}")
@Component
@Slf4j
public class WebSocketServer {
private static int onlineCount = 0;
private static CopyOnWriteArraySet<WebSocketServer> webSocketSet = new CopyOnWriteArraySet<>();
private Session session;
private String sid = "";
@OnOpen
public void onOpen(Session session, @PathParam("sid") String sid){
this.session = session;
webSocketSet.add(this);
addOnlineCount();
log.info("============》 有新窗口开始监听id为:"+sid+",当前在线人数为:"+getOnlineCount());
this.sid = sid;
try {
sendMessage("连接成功!");
}catch (IOException e){
log.error("webSocket io 异常");
}
}
@OnClose
public void onClose(){
webSocketSet.remove(this);
subOnlineCount();
log.info("=============》有一个连接关闭,当前在线人数为:"+getOnlineCount());
}
@OnMessage
public void onMessage(String message,Session session){
log.info("收到来自窗口id为:"+sid+"的信息,内容为:"+message);
for(WebSocketServer item : webSocketSet){
try {
item.sendMessage(message);
}catch (IOException e){
e.printStackTrace();
}
}
}
public void onError(Session session, Throwable error){
log.error("发生错误");
error.printStackTrace();
}
public void sendMessage(String message) throws IOException{
this.session.getBasicRemote().sendText(message);
}
public static void sendInfo(String message,@PathParam("sid") String sid) throws IOException{
log.info("推送消息到窗口id为:"+sid+",推送内容为:"+message);
for(WebSocketServer item : webSocketSet) {
if (sid == null) {
item.sendMessage(message);
} else if (item.sid.equals(sid)) {
item.sendMessage(message);
}
}
}
public static synchronized int getOnlineCount() {
return onlineCount;
}
public static synchronized void addOnlineCount() {
WebSocketServer.onlineCount++;
}
public static synchronized void subOnlineCount() {
WebSocketServer.onlineCount--;
}
}