From 0633a284073e6486cb180df191afa4145736b74e Mon Sep 17 00:00:00 2001 From: jiangs <373297395@qq.com> Date: Tue, 18 Nov 2025 20:29:58 +0800 Subject: [PATCH 1/2] =?UTF-8?q?ws=E6=9C=8D=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lis-interfaceCommon/pom.xml | 6 ++ .../config/WebSocketConfiguration.java | 19 +++++ .../websocket/WebSocketServer.java | 73 +++++++++++++++++++ pom.xml | 6 ++ 4 files changed, 104 insertions(+) create mode 100644 lis-interfaceCommon/src/main/java/com/czlis/interfaceCommon/config/WebSocketConfiguration.java create mode 100644 lis-interfaceCommon/src/main/java/com/czlis/interfaceCommon/websocket/WebSocketServer.java diff --git a/lis-interfaceCommon/pom.xml b/lis-interfaceCommon/pom.xml index c29ca96..dc457d0 100644 --- a/lis-interfaceCommon/pom.xml +++ b/lis-interfaceCommon/pom.xml @@ -70,6 +70,12 @@ pinyin4j + + org.springframework.boot + spring-boot-starter-websocket + + + diff --git a/lis-interfaceCommon/src/main/java/com/czlis/interfaceCommon/config/WebSocketConfiguration.java b/lis-interfaceCommon/src/main/java/com/czlis/interfaceCommon/config/WebSocketConfiguration.java new file mode 100644 index 0000000..bb20781 --- /dev/null +++ b/lis-interfaceCommon/src/main/java/com/czlis/interfaceCommon/config/WebSocketConfiguration.java @@ -0,0 +1,19 @@ +package com.czlis.interfaceCommon.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.socket.server.standard.ServerEndpointExporter; + + +/** + * WebSocket配置类,用于注册WebSocket的Bean + */ +@Configuration +public class WebSocketConfiguration { + + @Bean + public ServerEndpointExporter serverEndpointExporter() { + return new ServerEndpointExporter(); + } + +} 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 new file mode 100644 index 0000000..1c75e83 --- /dev/null +++ b/lis-interfaceCommon/src/main/java/com/czlis/interfaceCommon/websocket/WebSocketServer.java @@ -0,0 +1,73 @@ +package com.czlis.interfaceCommon.websocket; + + +import org.springframework.stereotype.Component; + +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; + +/** + * WebSocket服务 + */ +@Component +@ServerEndpoint("/ws/{sid}") +public class WebSocketServer { + + //存放会话对象 + private static Map sessionMap = new HashMap(); + + /** + * 连接建立成功调用的方法 + */ + @OnOpen + public void onOpen(Session session, @PathParam("sid") String sid) { + System.out.println("客户端:" + sid + "建立连接"); + sessionMap.put(sid, session); + } + + /** + * 收到客户端消息后调用的方法 + * + * @param message 客户端发送过来的消息 + */ + @OnMessage + public void onMessage(String message, @PathParam("sid") String sid) { + System.out.println("收到来自客户端:" + sid + "的信息:" + message); + } + + /** + * 连接关闭调用的方法 + * + * @param sid + */ + @OnClose + public void onClose(@PathParam("sid") String sid) { + System.out.println("连接断开:" + sid); + sessionMap.remove(sid); + } + + /** + * 群发 + * + * @param message + */ + public void sendToAllClient(String message) { + Collection sessions = sessionMap.values(); + for (Session session : sessions) { + try { + //服务器向客户端发送消息 + session.getBasicRemote().sendText(message); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + +} diff --git a/pom.xml b/pom.xml index 1b6d50a..dc57d48 100644 --- a/pom.xml +++ b/pom.xml @@ -123,6 +123,12 @@ test + + org.springframework.boot + spring-boot-starter-websocket + ${spring-boot.version} + + com.alibaba 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 2/2] =?UTF-8?q?ws=E4=BB=AA=E5=99=A8=E9=80=9A=E8=AE=AF?= =?UTF-8?q?=E7=B1=BB=EF=BC=8C=E4=BF=AE=E6=94=B9tomcat=E4=B8=BA112=E7=89=88?= =?UTF-8?q?=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