From b7a71b30c1c1b06a162678c90a54c8188097dc81 Mon Sep 17 00:00:00 2001 From: 13693261870 <252740454@qq.com> Date: 星期五, 13 十二月 2024 20:57:39 +0800 Subject: [PATCH] 1 --- se-modules/se-system/pom.xml | 12 +++ se-modules/se-system/src/main/java/com/se/system/config/WebSocketConfig.java | 14 ++++ se-modules/se-system/src/main/java/com/se/system/service/WebSocketService.java | 88 +++++++++++++++++++++++++++++ se-modules/se-system/src/main/java/com/se/system/service/impl/SysStatusCtrlServiceImpl.java | 6 ++ se-modules/se-system/src/main/java/com/se/system/config/RestTemplateConfig.java | 2 5 files changed, 120 insertions(+), 2 deletions(-) diff --git a/se-modules/se-system/pom.xml b/se-modules/se-system/pom.xml index d6142f2..4ffb72f 100644 --- a/se-modules/se-system/pom.xml +++ b/se-modules/se-system/pom.xml @@ -16,7 +16,6 @@ </description> <dependencies> - <!-- SpringCloud Alibaba Nacos --> <dependency> <groupId>com.alibaba.cloud</groupId> @@ -130,6 +129,17 @@ <artifactId>caffeine</artifactId> <version>2.9.3</version> </dependency> + + <!--websocket--> + <dependency> + <groupId>javax.websocket</groupId> + <artifactId>javax.websocket-api</artifactId> + <version>1.0</version> + </dependency> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-websocket</artifactId> + </dependency> </dependencies> <build> diff --git a/se-modules/se-system/src/main/java/com/se/system/config/RestTemplateConfig.java b/se-modules/se-system/src/main/java/com/se/system/config/RestTemplateConfig.java index 79fa634..e13532b 100644 --- a/se-modules/se-system/src/main/java/com/se/system/config/RestTemplateConfig.java +++ b/se-modules/se-system/src/main/java/com/se/system/config/RestTemplateConfig.java @@ -4,8 +4,8 @@ import org.springframework.context.annotation.Configuration; import org.springframework.web.client.RestTemplate; -@SuppressWarnings("ALL") @Configuration +@SuppressWarnings("ALL") public class RestTemplateConfig { @Bean public RestTemplate restTemplate() { diff --git a/se-modules/se-system/src/main/java/com/se/system/config/WebSocketConfig.java b/se-modules/se-system/src/main/java/com/se/system/config/WebSocketConfig.java new file mode 100644 index 0000000..614ccb7 --- /dev/null +++ b/se-modules/se-system/src/main/java/com/se/system/config/WebSocketConfig.java @@ -0,0 +1,14 @@ +package com.se.system.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.stereotype.Component; +import org.springframework.web.socket.server.standard.ServerEndpointExporter; + +@Component +@SuppressWarnings("ALL") +public class WebSocketConfig { + @Bean + public ServerEndpointExporter serverEndpointExporter() { + return new ServerEndpointExporter(); + } +} diff --git a/se-modules/se-system/src/main/java/com/se/system/service/WebSocketService.java b/se-modules/se-system/src/main/java/com/se/system/service/WebSocketService.java new file mode 100644 index 0000000..c673a21 --- /dev/null +++ b/se-modules/se-system/src/main/java/com/se/system/service/WebSocketService.java @@ -0,0 +1,88 @@ +package com.se.system.service; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; +import javax.websocket.*; +import javax.websocket.server.ServerEndpoint; +import java.io.IOException; +import java.util.concurrent.CopyOnWriteArraySet; +import java.util.concurrent.atomic.AtomicInteger; + +@Component +@SuppressWarnings("ALL") +@ServerEndpoint(value = "/ws/query") +public class WebSocketService { + @PostConstruct + public void init() { + System.out.println("websocket 鍔犺浇瀹屾垚"); + } + + private static final Logger log = LoggerFactory.getLogger(WebSocketService.class); + + private static final AtomicInteger ONLINE_COUNT = new AtomicInteger(0); + + private final static CopyOnWriteArraySet<Session> SESSION_SET = new CopyOnWriteArraySet<Session>(); + + @OnOpen + public void onOpen(Session session) { + SESSION_SET.add(session); + + int cnt = ONLINE_COUNT.incrementAndGet(); + log.info("鏈夎繛鎺ュ姞鍏ワ紝褰撳墠杩炴帴鏁颁负锛歿}", cnt); + sendMessage(session, "杩炴帴鎴愬姛"); + } + + @OnClose + public void onClose(Session session) { + SESSION_SET.remove(session); + + int cnt = ONLINE_COUNT.decrementAndGet(); + log.info("鏈夎繛鎺ュ叧闂紝褰撳墠杩炴帴鏁颁负锛歿}", cnt); + } + + @OnMessage + public void onMessage(String message, Session session) { + log.info("鏉ヨ嚜瀹㈡埛绔殑娑堟伅锛歿}", message); + sendMessage(session, "鏀跺埌娑堟伅锛屾秷鎭唴瀹癸細" + message); + } + + @OnError + public void onError(Session session, Throwable error) { + log.error("鍙戠敓閿欒锛歿}锛孲ession ID锛� {}", error.getMessage(), session.getId()); + } + + public static void sendMessage(Session session, String message) { + try { + session.getBasicRemote().sendText(String.format("%s", message)); + } catch (Exception ex) { + log.error("鍙戦�佹秷鎭嚭閿欙細{}", ex.getMessage()); + } + } + + public static void broadCastInfo(String message) throws IOException { + for (Session session : SESSION_SET) { + if (session.isOpen()) { + sendMessage(session, message); + } + } + } + + public static void sendMessage(String message, String sessionId) throws IOException { + Session session = null; + for (Session s : SESSION_SET) { + if (s.getId().equals(sessionId)) { + session = s; + break; + } + } + + if (session != null) { + sendMessage(session, message); + } else { + log.info("娌℃湁鎵惧埌浣犳寚瀹欼D鐨勪細璇濓細{}", sessionId); + } + } +} diff --git a/se-modules/se-system/src/main/java/com/se/system/service/impl/SysStatusCtrlServiceImpl.java b/se-modules/se-system/src/main/java/com/se/system/service/impl/SysStatusCtrlServiceImpl.java index ce041b5..d606e87 100644 --- a/se-modules/se-system/src/main/java/com/se/system/service/impl/SysStatusCtrlServiceImpl.java +++ b/se-modules/se-system/src/main/java/com/se/system/service/impl/SysStatusCtrlServiceImpl.java @@ -2,6 +2,7 @@ import java.util.List; import com.se.common.core.utils.DateUtils; +import com.se.system.service.WebSocketService; import com.se.system.utils.CaffeineUtils; import com.se.system.utils.ConnectUtils; import com.se.system.utils.StringUtils; @@ -128,4 +129,9 @@ sysStatusCtrlMapper.updates(list); } + + private void sendMsg(String json) throws Exception { + //String json = JSONObject.toJSONStringWithDateFormat(jsonObject, "yyyy-MM-dd HH:mm:ss", SerializerFeature.WriteMapNullValue); + WebSocketService.broadCastInfo(json); + } } -- Gitblit v1.9.3