From 8e742cd563bb9d97855fc0116223e3c20ad31686 Mon Sep 17 00:00:00 2001
From: xuxin <840198532@qq.com>
Date: Mon, 1 Dec 2025 14:01:16 +0800
Subject: [PATCH] =?UTF-8?q?=E8=8B=8D=E7=A9=B9=E5=A4=96=E5=8D=96--WebSocket?=
=?UTF-8?q?-=E6=9C=8D=E5=8A=A1=E5=99=A8=E4=B8=8E=E5=AE=A2=E6=88=B7?=
=?UTF-8?q?=E7=AB=AF=E5=8F=8C=E5=90=91=E9=80=9A=E8=AE=AF?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
sky-server/pom.xml | 5 ++
.../sky/config/WebSocketConfiguration.java | 18 +++++
.../src/main/java/com/sky/task/OrderTask.java | 4 +-
.../main/java/com/sky/task/WebSocketTask.java | 22 ++++++
.../com/sky/websocket/WebSocketServer.java | 71 +++++++++++++++++++
5 files changed, 118 insertions(+), 2 deletions(-)
create mode 100644 sky-server/src/main/java/com/sky/config/WebSocketConfiguration.java
create mode 100644 sky-server/src/main/java/com/sky/task/WebSocketTask.java
create mode 100644 sky-server/src/main/java/com/sky/websocket/WebSocketServer.java
diff --git a/sky-server/pom.xml b/sky-server/pom.xml
index 565b5da..d5b6696 100644
--- a/sky-server/pom.xml
+++ b/sky-server/pom.xml
@@ -117,6 +117,11 @@
org.apache.poi
poi-ooxml
+
+
+ org.springframework.boot
+ spring-boot-starter-websocket
+
diff --git a/sky-server/src/main/java/com/sky/config/WebSocketConfiguration.java b/sky-server/src/main/java/com/sky/config/WebSocketConfiguration.java
new file mode 100644
index 0000000..a46c2cb
--- /dev/null
+++ b/sky-server/src/main/java/com/sky/config/WebSocketConfiguration.java
@@ -0,0 +1,18 @@
+package com.sky.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/sky-server/src/main/java/com/sky/task/OrderTask.java b/sky-server/src/main/java/com/sky/task/OrderTask.java
index 3c2e8d0..c765283 100644
--- a/sky-server/src/main/java/com/sky/task/OrderTask.java
+++ b/sky-server/src/main/java/com/sky/task/OrderTask.java
@@ -19,7 +19,7 @@ public class OrderTask {
//处理订单超时未支付状态
// @Scheduled(cron = "0 * * * * ? ")
- @Scheduled(cron = "0/5 * * * * ? ")
+// @Scheduled(cron = "0/5 * * * * ? ")
public void procesTimeOutOrder(){
log.info("定时任务自动执行,处理支付超时订单:"+ LocalDateTime.now());
//每分中查询一下订单,是否有超过15分(下单时间+15分钟 < 当前时间)
@@ -42,7 +42,7 @@ public class OrderTask {
//每日处理“派送中”的订单为已完成,每天凌晨1点执行一次
// @Scheduled(cron = "0 0 1 * * ? ")
- @Scheduled(cron = "0/5 * * * * ? ")
+// @Scheduled(cron = "0/5 * * * * ? ")
public void processPsOrder(){
log.info("定时任务自动执行,处理派送中,未完成的订单:"+ LocalDateTime.now());
//每天上午1点查询一下,前一天是否有派送中,未完成的订单(下单时间< 当前时间 - 1小时)
diff --git a/sky-server/src/main/java/com/sky/task/WebSocketTask.java b/sky-server/src/main/java/com/sky/task/WebSocketTask.java
new file mode 100644
index 0000000..4d8223b
--- /dev/null
+++ b/sky-server/src/main/java/com/sky/task/WebSocketTask.java
@@ -0,0 +1,22 @@
+package com.sky.task;
+
+import com.sky.websocket.WebSocketServer;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+
+@Component
+public class WebSocketTask {
+ @Autowired
+ private WebSocketServer webSocketServer;
+
+ /**
+ * 通过WebSocket每隔5秒向客户端发送消息
+ */
+ @Scheduled(cron = "0/5 * * * * ?")
+ public void sendMessageToClient() {
+ webSocketServer.sendToAllClient("这是来自服务端的消息:" + DateTimeFormatter.ofPattern("HH:mm:ss").format(LocalDateTime.now()));
+ }
+}
diff --git a/sky-server/src/main/java/com/sky/websocket/WebSocketServer.java b/sky-server/src/main/java/com/sky/websocket/WebSocketServer.java
new file mode 100644
index 0000000..9a5fc83
--- /dev/null
+++ b/sky-server/src/main/java/com/sky/websocket/WebSocketServer.java
@@ -0,0 +1,71 @@
+package com.sky.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();
+ }
+ }
+ }
+
+}