javaWebSocket带参数处理使用
- 电脑硬件
- 2025-07-21 19:17:22

1、webSocket实现代码
@Component public class WebSocketStompConfig { //这个bean的注册,用于扫描带有@ServerEndpoint的注解成为websocket // ,如果你使用外置的tomcat就不需要该配置文件 @Bean public ServerEndpointExporter serverEndpointExporter() { return new ServerEndpointExporter(); } } @Component @ServerEndpoint(value = "/webSocket") @Slf4j public class WebSocket { private static int onlineCount = 0; private static ConcurrentHashMap<String, Set<Session>> webSocketMap = new ConcurrentHashMap<>(); private Session session; @OnOpen public void onOpen(Session session) { this.session = session; // 获取URL中的参数 Map<String, List<String>> params = session.getRequestParameterMap(); List<String> funcTypes = params.get("funcType"); if (!funcTypes.isEmpty()) { // 取出funcType参数的值 String funcType = funcTypes.get(0); if(webSocketMap.containsKey(funcType)){ webSocketMap.get(funcType).add(session); }else{ Set<Session> sessionSet = new HashSet<>(); sessionSet.add(session); webSocketMap.put(funcType,sessionSet); } } System.out.println("有新连接加入!当前在线人数为" + getOnlineCount()); } @OnClose public void onClose(){ webSocketMap=new ConcurrentHashMap<>(); log.info("有一连接关闭!当前在线人数为" + getOnlineCount()); } @OnMessage public void onMessage(String message, Session session) { System.out.println("来自客户端的消息:" + message); } @OnError public void onError(Session session, Throwable error) { System.out.println("发生错误"); error.printStackTrace(); } public static void sendMessage(Session session, String message) throws IOException { session.getBasicRemote().sendText(message); } public static synchronized int getOnlineCount() { return onlineCount; } public static synchronized void addOnlineCount() { WebSocket.onlineCount++; } public static synchronized void subOnlineCount() { WebSocket.onlineCount--; } public static void setOnlineCount(int onlineCount) { WebSocket.onlineCount = onlineCount; } public static ConcurrentHashMap<String, Set<Session>> getWebSocketMap() { return webSocketMap; } public static void setWebSocketMap(ConcurrentHashMap<String, Set<Session>> webSocketMap) { WebSocket.webSocketMap = webSocketMap; } public Session getSession() { return session; } public void setSession(Session session) { this.session = session; } /** * 发送自定义消息 * */ public static void sendInfo(String message,String funcType) throws Exception { if(webSocketMap.containsKey(funcType)){ Set<Session> sessionSet = webSocketMap.get(funcType); if(sessionSet!=null){ for (Session session : sessionSet) { if(session.getBasicRemote()!=null){ session.getBasicRemote().sendText(message); } } } }else{ log.error("订阅类型:"+funcType+",不存在!"); throw new Exception("连接已关闭,请刷新页面后重试"); } } }二、java代码调用,往websocker赋数据
WebSocket.sendInfo(JSON.toJSONString("sdfasd232"),"3");三、测试是否连接成功以及推送信息
四、前端代码处理
/** * 初始化websocket连接 */ function initWebSocket() { var websocket = null; if('WebSocket' in window) { websocket = new WebSocket("ws://127.0.0.1:8080/webSocket?funcType=3" ); } else { alert("该浏览器不支持websocket!"); } websocket.onopen = function(event) { console.log("建立连接"); websocket.send('Hello WebSockets!'); } websocket.onclose = function(event) { console.log('连接关闭') reconnect(); //尝试重连websocket } //建立通信后,监听到后端的数据传递 websocket.onmessage = function(event) { let data = JSON.parse(event.data); //业务处理.... if(data.step == 1){ alert(data.msg); } } websocket.onerror = function() { // notify.warn("websocket通信发生错误!"); // initWebSocket() } window.onbeforeunload = function() { websocket.close(); } // 重连 function reconnect() { console.log("正在重连"); // 进行重连 setTimeout(function () { initWebSocket(); }, 1000); }javaWebSocket带参数处理使用由讯客互联电脑硬件栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“javaWebSocket带参数处理使用”