From f8d625ae337a060dcb9a0a42b2698435ede44242 Mon Sep 17 00:00:00 2001 From: jiangs <373297395@qq.com> Date: Wed, 19 Nov 2025 14:18:14 +0800 Subject: [PATCH] =?UTF-8?q?ws=E4=BB=AA=E5=99=A8=E9=80=9A=E8=AE=AF=E7=B1=BB?= =?UTF-8?q?=EF=BC=8C=E4=BF=AE=E6=94=B9tomcat=E4=B8=BA112=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pojo/websocket/WSParam.java | 12 ++++ .../pojo/websocket/WebSocketParam.java | 14 +++++ .../websocket/WebSocketInstrComm.java | 59 +++++++++++++++++++ .../websocket/WebSocketServer.java | 25 ++++---- .../czlis/system/config/SecurityConfig.java | 1 + pom.xml | 2 +- 6 files changed, 99 insertions(+), 14 deletions(-) create mode 100644 lis-interfaceCommon/src/main/java/com/czlis/interfaceCommon/pojo/websocket/WSParam.java create mode 100644 lis-interfaceCommon/src/main/java/com/czlis/interfaceCommon/pojo/websocket/WebSocketParam.java create mode 100644 lis-interfaceCommon/src/main/java/com/czlis/interfaceCommon/websocket/WebSocketInstrComm.java diff --git a/lis-interfaceCommon/src/main/java/com/czlis/interfaceCommon/pojo/websocket/WSParam.java b/lis-interfaceCommon/src/main/java/com/czlis/interfaceCommon/pojo/websocket/WSParam.java new file mode 100644 index 0000000..ba1876a --- /dev/null +++ b/lis-interfaceCommon/src/main/java/com/czlis/interfaceCommon/pojo/websocket/WSParam.java @@ -0,0 +1,12 @@ +package com.czlis.interfaceCommon.pojo.websocket; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class WSParam { + private String yq; +} diff --git a/lis-interfaceCommon/src/main/java/com/czlis/interfaceCommon/pojo/websocket/WebSocketParam.java b/lis-interfaceCommon/src/main/java/com/czlis/interfaceCommon/pojo/websocket/WebSocketParam.java new file mode 100644 index 0000000..691b824 --- /dev/null +++ b/lis-interfaceCommon/src/main/java/com/czlis/interfaceCommon/pojo/websocket/WebSocketParam.java @@ -0,0 +1,14 @@ +package com.czlis.interfaceCommon.pojo.websocket; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.websocket.Session; + +@Data +@AllArgsConstructor +public class WebSocketParam { + private Session session; + private WSParam wsParam; +} diff --git a/lis-interfaceCommon/src/main/java/com/czlis/interfaceCommon/websocket/WebSocketInstrComm.java b/lis-interfaceCommon/src/main/java/com/czlis/interfaceCommon/websocket/WebSocketInstrComm.java new file mode 100644 index 0000000..349ee16 --- /dev/null +++ b/lis-interfaceCommon/src/main/java/com/czlis/interfaceCommon/websocket/WebSocketInstrComm.java @@ -0,0 +1,59 @@ +package com.czlis.interfaceCommon.websocket; + +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; +import com.czlis.interfaceCommon.pojo.websocket.WSParam; +import com.czlis.interfaceCommon.pojo.websocket.WebSocketParam; +import org.springframework.stereotype.Component; + +import javax.websocket.OnMessage; +import javax.websocket.server.PathParam; +import javax.websocket.server.ServerEndpoint; +import java.util.Collection; + +/** + * ws仪器通讯类 + */ +@Component +@ServerEndpoint("/ws/instr/{sid}") +public class WebSocketInstrComm extends WebSocketServer { + + /** + * 接收消息 + * @param message 客户端发送过来的消息 + * @param sid + */ + @Override + @OnMessage + public void onMessage(String message,@PathParam("sid") String sid) { + super.onMessage(message, sid); + String yq = ""; + try{ + JSONObject jsonObject = JSONUtil.parseObj(message); + yq = jsonObject.getStr("yq"); + }catch (Exception e){ + + } + sessionMap.put(sid,new WebSocketParam(sessionMap.get(sid).getSession(),new WSParam(yq))); + System.out.println(sessionMap); + } + + /** + * 给指定的客户端发消息 + * @param message + */ + public void sendToSingleClient(String message,String yq){ + Collection sessions = sessionMap.values(); + for (WebSocketParam webSocketParam : sessions) { + String yq1 = webSocketParam.getWsParam().getYq(); + try { + if(yq1.equals(yq)){ + //服务器向客户端发送消息 + webSocketParam.getSession().getBasicRemote().sendText(message); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + } +} diff --git a/lis-interfaceCommon/src/main/java/com/czlis/interfaceCommon/websocket/WebSocketServer.java b/lis-interfaceCommon/src/main/java/com/czlis/interfaceCommon/websocket/WebSocketServer.java index 1c75e83..12ae285 100644 --- a/lis-interfaceCommon/src/main/java/com/czlis/interfaceCommon/websocket/WebSocketServer.java +++ b/lis-interfaceCommon/src/main/java/com/czlis/interfaceCommon/websocket/WebSocketServer.java @@ -1,27 +1,25 @@ package com.czlis.interfaceCommon.websocket; -import org.springframework.stereotype.Component; + +import com.czlis.interfaceCommon.pojo.websocket.WebSocketParam; + import javax.websocket.OnClose; import javax.websocket.OnMessage; import javax.websocket.OnOpen; import javax.websocket.Session; import javax.websocket.server.PathParam; -import javax.websocket.server.ServerEndpoint; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; +import java.util.*; /** * WebSocket服务 */ -@Component -@ServerEndpoint("/ws/{sid}") + public class WebSocketServer { //存放会话对象 - private static Map sessionMap = new HashMap(); + protected static Map sessionMap = new HashMap(); /** * 连接建立成功调用的方法 @@ -29,7 +27,8 @@ public class WebSocketServer { @OnOpen public void onOpen(Session session, @PathParam("sid") String sid) { System.out.println("客户端:" + sid + "建立连接"); - sessionMap.put(sid, session); + session.setMaxTextMessageBufferSize(8192000); + sessionMap.put(sid,new WebSocketParam(session,null)); } /** @@ -54,16 +53,16 @@ public class WebSocketServer { } /** - * 群发 + * 给所有客户端群发 * * @param message */ public void sendToAllClient(String message) { - Collection sessions = sessionMap.values(); - for (Session session : sessions) { + Collection sessions = sessionMap.values(); + for (WebSocketParam webSocketParam : sessions) { try { //服务器向客户端发送消息 - session.getBasicRemote().sendText(message); + webSocketParam.getSession().getBasicRemote().sendText(message); } catch (Exception e) { e.printStackTrace(); } diff --git a/lis-system/src/main/java/com/czlis/system/config/SecurityConfig.java b/lis-system/src/main/java/com/czlis/system/config/SecurityConfig.java index e08d166..4499fe1 100644 --- a/lis-system/src/main/java/com/czlis/system/config/SecurityConfig.java +++ b/lis-system/src/main/java/com/czlis/system/config/SecurityConfig.java @@ -113,6 +113,7 @@ public class SecurityConfig { .antMatchers(HttpMethod.GET, "/", "/*.html", "/**/*.html", "/**/*.css", "/**/*.js", "/profile/**").permitAll() .antMatchers("/swagger-ui.html", "/swagger-resources/**", "/webjars/**", "/*/api-docs", "/druid/**","/printPDF/**","/graphs/**").permitAll() .antMatchers("/doc.html").permitAll() //Knife4j 过滤 + .antMatchers("/ws/**").permitAll() //websocket过滤 // 除上面外的所有请求全部需要鉴权认证 .anyRequest().authenticated(); }) diff --git a/pom.xml b/pom.xml index dc57d48..9662477 100644 --- a/pom.xml +++ b/pom.xml @@ -47,7 +47,7 @@ 7.2.5 - 9.0.98 + 9.0.112 1.2.13 5.7.12 5.3.39