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"); + } + +}