后端
注入maven依赖
<!--websocket-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
第一种方式
package com.jx.fly.common.config;
import com.jx.fly.module.mapper.LaborProjectConfigMapper;
import com.jx.fly.websocket.WebSocketServer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.server.standard.ServerEndpointExporter;
@Configuration
public class WebSocketConfig{
@Bean
public ServerEndpointExporter serverEndpointExporter() {
return new ServerEndpointExporter();
}
@Autowired
public void setMapper(LaborProjectConfigMapper laborProjectConfigMapper){
WebSocketServer.laborProjectConfigMapper=laborProjectConfigMapper;
}
}
package com.jx.fly.websocket;
import cn.hutool.log.StaticLog;
import com.jx.fly.module.mapper.LaborProjectConfigMapper;
import com.jx.smart.common.model.labor.attendance.project.LaborProjectConfigModel;
import org.springframework.stereotype.Component;
import javax.websocket.*;
import javax.websocket.server.PathParam;
import javax.websocket.server.ServerEndpoint;
import java.io.IOException;
import java.util.*;
import java.util.concurrent.CopyOnWriteArraySet;
@ServerEndpoint("/websocket/{projectId}")
@Component
public class WebSocketServer {
public static LaborProjectConfigMapper laborProjectConfigMapper;
private static Map<Integer, CopyOnWriteArraySet<WebSocketServer>> SERVER_MAP = new HashMap<>();
private Session session;
private int projectId;
@OnOpen
public void onOpen(Session session,@PathParam("projectId") Integer projectId){
this.session = session;
this.projectId = projectId;
if (projectId != null){
LaborProjectConfigModel model = laborProjectConfigMapper.selectById(projectId);
if (model != null){
CopyOnWriteArraySet<WebSocketServer> set = SERVER_MAP.get(projectId);
if (set != null){
set.add(this);
}else {
CopyOnWriteArraySet<WebSocketServer> sessionSet = new CopyOnWriteArraySet<>();
sessionSet.add(this);
SERVER_MAP.put(projectId,sessionSet);
}
StaticLog.info("session:"+session+"连接成功,"+model.getId()+"项目在线数量: "+SERVER_MAP.get(projectId).size());
sendMessage("连接成功");
}else {
StaticLog.error("websocket IO异常");
sendMessage("非法连接");
}
}else {
sendMessage("projectId不能为空");
}
}
@OnClose
public