From 7d7802acb8e24b31456b4bba20ae750681761147 Mon Sep 17 00:00:00 2001
From: Cool <747682928@qq.com>
Date: Fri, 5 Jul 2024 16:28:02 +0800
Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0websocket?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
pom.xml | 5 ++
.../aitest/config/WebSocketConfig.java | 20 ++++++
.../controller/websocket/WebSocketServer.java | 63 +++++++++++++++++++
.../com/example/aitest/WebsocketTest.java | 14 +++++
4 files changed, 102 insertions(+)
create mode 100644 src/main/java/com/example/aitest/config/WebSocketConfig.java
create mode 100644 src/main/java/com/example/aitest/controller/websocket/WebSocketServer.java
create mode 100644 src/test/java/com/example/aitest/WebsocketTest.java
diff --git a/pom.xml b/pom.xml
index 3fa34ad..98cfedc 100644
--- a/pom.xml
+++ b/pom.xml
@@ -34,6 +34,11 @@
org.springframework.boot
spring-boot-starter
+
+
+ org.springframework.boot
+ spring-boot-starter-websocket
+
com.auth0
java-jwt
diff --git a/src/main/java/com/example/aitest/config/WebSocketConfig.java b/src/main/java/com/example/aitest/config/WebSocketConfig.java
new file mode 100644
index 0000000..40b6038
--- /dev/null
+++ b/src/main/java/com/example/aitest/config/WebSocketConfig.java
@@ -0,0 +1,20 @@
+package com.example.aitest.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.socket.server.standard.ServerEndpointExporter;
+
+@Configuration
+public class WebSocketConfig {
+
+ /*
+ * 注入一个ServerEndpointExporter,该Bean会自动注册使用@ServerEndpoint注解申明的websocket endpoint
+ *
+ * */
+
+// @Profile("!test")
+ @Bean
+ public ServerEndpointExporter serverEndpointExporter() {
+ return new ServerEndpointExporter();
+ }
+}
diff --git a/src/main/java/com/example/aitest/controller/websocket/WebSocketServer.java b/src/main/java/com/example/aitest/controller/websocket/WebSocketServer.java
new file mode 100644
index 0000000..9e6d222
--- /dev/null
+++ b/src/main/java/com/example/aitest/controller/websocket/WebSocketServer.java
@@ -0,0 +1,63 @@
+package com.example.aitest.controller.websocket;
+
+
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+import org.springframework.web.bind.annotation.CrossOrigin;
+import javax.websocket.*;
+import javax.websocket.server.ServerEndpoint;
+import java.io.IOException;
+import java.util.List;
+import java.util.concurrent.CopyOnWriteArrayList;
+
+@CrossOrigin
+@Slf4j
+@ServerEndpoint(value = "/danger/get")
+@Component
+public class WebSocketServer {
+
+ private static final List sessionList = new CopyOnWriteArrayList<>();
+
+ @OnOpen
+ public void onOpen(Session session) throws IOException {
+ sessionList.add(session);
+ log.info("有新用户加入聊天,当前在线人数为{}", sessionList.size());
+ sendAllSession("二级");
+ }
+
+ @OnMessage
+ public void onMessage(String message) throws IOException {
+ log.info("webMessage{}",message);
+ sendAllSession(message);
+ }
+
+ @OnError
+ public void onError(Throwable error) {
+ log.error("发生错误");
+ error.printStackTrace();
+ }
+
+ @OnClose
+ public void onClose(Session session) {
+ log.info("有一个用户断开连接了");
+ sessionList.remove(session);
+ }
+
+ /*
+ * 发消息给客户端
+ * */
+ public void sendAllSession(String message){
+
+ try {
+ for (Session session : sessionList) {
+ log.info("给客户端发送消息{}", session);
+ session.getBasicRemote().sendText(message);
+ }
+ } catch (Exception e) {
+ log.error("消息发送失败", e);
+ }
+
+ }
+
+
+}
diff --git a/src/test/java/com/example/aitest/WebsocketTest.java b/src/test/java/com/example/aitest/WebsocketTest.java
new file mode 100644
index 0000000..ff46851
--- /dev/null
+++ b/src/test/java/com/example/aitest/WebsocketTest.java
@@ -0,0 +1,14 @@
+package com.example.aitest;
+
+import org.junit.jupiter.api.Test;
+import org.springframework.boot.test.context.SpringBootTest;
+
+@SpringBootTest
+public class WebsocketTest {
+
+ @Test
+ public void test() {
+ System.out.println("Test");
+ }
+
+}