From 0d391fda55cb0f0a6d552d83e929ccd78a6587b7 Mon Sep 17 00:00:00 2001
From: "Yangkai.Shen" <237497819@qq.com>
Date: Mon, 17 Dec 2018 11:13:14 +0800
Subject: [PATCH] =?UTF-8?q?:sparkles:=20spring-boot-demo-websocket=20?=
=?UTF-8?q?=E5=AE=8C=E6=88=90?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
spring-boot-demo-websocket/README.md | 387 ++++++++++++++++++
.../image-20181217110240322-5015760.png | Bin 0 -> 224442 bytes
.../assets/image-20181217110240322.png | Bin 0 -> 224442 bytes
.../image-20181217110304065-5015784.png | Bin 0 -> 298944 bytes
.../assets/image-20181217110304065.png | Bin 0 -> 298944 bytes
.../image-20181217110328810-5015808.png | Bin 0 -> 309596 bytes
.../assets/image-20181217110328810.png | Bin 0 -> 309596 bytes
.../image-20181217110336017-5015816.png | Bin 0 -> 266383 bytes
.../assets/image-20181217110336017.png | Bin 0 -> 266383 bytes
.../controller/ServerController.java | 36 ++
.../websocket/payload/server/CpuVO.java | 8 +-
.../websocket/payload/server/JvmVO.java | 7 +-
.../websocket/payload/server/MemVO.java | 7 +-
.../websocket/payload/server/SysFileVO.java | 2 +-
.../xkcoding/websocket/task/ServerTask.java | 12 +-
.../xkcoding/websocket/util/ServerUtil.java | 48 +++
.../src/main/resources/static/server.html | 124 +++++-
17 files changed, 598 insertions(+), 33 deletions(-)
create mode 100644 spring-boot-demo-websocket/assets/image-20181217110240322-5015760.png
create mode 100644 spring-boot-demo-websocket/assets/image-20181217110240322.png
create mode 100644 spring-boot-demo-websocket/assets/image-20181217110304065-5015784.png
create mode 100644 spring-boot-demo-websocket/assets/image-20181217110304065.png
create mode 100644 spring-boot-demo-websocket/assets/image-20181217110328810-5015808.png
create mode 100644 spring-boot-demo-websocket/assets/image-20181217110328810.png
create mode 100644 spring-boot-demo-websocket/assets/image-20181217110336017-5015816.png
create mode 100644 spring-boot-demo-websocket/assets/image-20181217110336017.png
create mode 100644 spring-boot-demo-websocket/src/main/java/com/xkcoding/websocket/controller/ServerController.java
create mode 100644 spring-boot-demo-websocket/src/main/java/com/xkcoding/websocket/util/ServerUtil.java
diff --git a/spring-boot-demo-websocket/README.md b/spring-boot-demo-websocket/README.md
index 479c0d8..2994b24 100644
--- a/spring-boot-demo-websocket/README.md
+++ b/spring-boot-demo-websocket/README.md
@@ -1 +1,388 @@
# spring-boot-demo-websocket
+
+> 此 demo 主要演示了 Spring Boot 如何集成 WebSocket,实现后端主动往前端推送数据。网上大部分websocket的例子都是聊天室,本例主要是推送服务器状态信息。前端页面基于vue和element-ui实现。
+
+## 1. 代码
+
+### 1.1. pom.xml
+
+```xml
+
+
+ * WebSocket配置 + *
+ * + * @package: com.xkcoding.websocket.config + * @description: WebSocket配置 + * @author: yangkai.shen + * @date: Created in 2018-12-14 15:58 + * @copyright: Copyright (c) 2018 + * @version: V1.0 + * @modified: yangkai.shen + */ +@Configuration +@EnableWebSocket +@EnableWebSocketMessageBroker +public class WebSocketConfig implements WebSocketMessageBrokerConfigurer { + + @Override + public void registerStompEndpoints(StompEndpointRegistry registry) { + // 注册一个 /notification 端点,前端通过这个端点进行连接 + registry.addEndpoint("/notification") + //解决跨域问题 + .setAllowedOrigins("*") + .withSockJS(); + } + + @Override + public void configureMessageBroker(MessageBrokerRegistry registry) { + //定义了一个客户端订阅地址的前缀信息,也就是客户端接收服务端发送消息的前缀信息 + registry.enableSimpleBroker("/topic"); + } + +} +``` + +### 1.3. 服务器相关实体 + +> 此部分实体 参见包路径 [com.xkcoding.websocket.model](./src/main/java/com/xkcoding/websocket/model) + +### 1.4. ServerTask.java + +```java +/** + *+ * 服务器定时推送任务 + *
+ * + * @package: com.xkcoding.websocket.task + * @description: 服务器定时推送任务 + * @author: yangkai.shen + * @date: Created in 2018-12-14 16:04 + * @copyright: Copyright (c) 2018 + * @version: V1.0 + * @modified: yangkai.shen + */ +@Slf4j +@Component +public class ServerTask { + @Autowired + private SimpMessagingTemplate wsTemplate; + + /** + * 按照标准时间来算,每隔 2s 执行一次 + */ + @Scheduled(cron = "0/2 * * * * ?") + public void websocket() throws Exception { + log.info("【推送消息】开始执行:{}", DateUtil.formatDateTime(new Date())); + // 查询服务器状态 + Server server = new Server(); + server.copyTo(); + ServerVO serverVO = ServerUtil.wrapServerVO(server); + Dict dict = ServerUtil.wrapServerDict(serverVO); + wsTemplate.convertAndSend(WebSocketConsts.PUSH_SERVER, JSONUtil.toJsonStr(dict)); + log.info("【推送消息】执行结束:{}", DateUtil.formatDateTime(new Date())); + } +} +``` + +### 1.5. server.html + +```html + + + + +cs&(WE-L8