java端代码
package org.jeecg.modules.cases.controller;
import java.io.IOException;
import java.util.List;
import java.util.concurrent.CopyOnWriteArraySet;
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 lombok.extern.log4j.Log4j2;
import org.jeecg.config.SpringUtil;
import org.jeecg.modules.system.entity.SysUserDepart;
import org.jeecg.modules.system.mapper.SysUserDepartMapper;
import org.jeecg.modules.system.mapper.SysUserRoleMapper;
import org.springframework.stereotype.Component;
@Log4j2
@ServerEndpoint("/websocket/{uid}")
@Component
public class WebSocketServer {
//有时候会因为初始化类属性时容器中还未有相应的been造成创建WebSocketServer been失败,可以考虑将下边的两个属性在要使用的地方获取使用
private static SysUserDepartMapper sysUserDepartMapper= SpringUtil.getBean(SysUserDepartMapper.class);
private static SysUserRoleMapper sysUserRoleMapper= SpringUtil.getBean(SysUserRoleMapper.class);
//静态变量,用来记录当前在线连接数。应该把它设计成线程安全的。
private static int onlineCount = 0;
//concurrent包的线程安全Set,用来存放每个客户端对应的MyWebSocket对象。
//在真正的使用中这个set的大小回应为非正规的退出(没调用close方法就关闭页面了),导致数量只增不减,后期需要一个客户端定期的一个心跳机制来控制删除一些已死的连接
private static CopyOnWriteArraySet<WebSocketServer> webSocketSet = new CopyOnWriteArraySet<WebSocketServer>();
//与某个客户端的连接会话,需要通过它来给客户端发送数据
private Session session;
//用户id
private String uid="";
//用户数所属部门
private String depid="";
//用户所属部门
private String roleid="";
/**
* 连接建立成功调用的方法*/
@OnOpen
public void onOpen(Session session,@PathParam("uid") String uid) {
List<SysUserDepart> deps = sysUserDepartMapper.getUserDepartByUid(uid);//根据用户id获取部门
List<String> rol