From 39954353cc71088f82016bc0bc64769bc19f972e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E7=A7=A6=E8=8B=B1=E6=9D=B0?= <327782001@qq.com>
Date: Sat, 26 Aug 2023 17:47:51 +0800
Subject: [PATCH] =?UTF-8?q?fix:=E6=B7=BB=E5=8A=A0websocket=E6=94=B6?=
=?UTF-8?q?=E5=8F=91=E6=B6=88=E6=81=AF?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
pom.xml | 6 +
.../SpringBootKwanApplication.java | 2 +
.../config/WebSocketConfig.java | 2 +-
.../controller/SystemController.java | 40 -----
.../springbootkwan/filter/TimeFilter.java | 2 +-
.../service/WebSocketServer.java | 139 ++++++------------
src/main/resources/application.yaml | 2 +-
src/main/resources/index.html | 84 +++--------
src/main/resources/templates/socket1.html | 74 ++++++++++
9 files changed, 150 insertions(+), 201 deletions(-)
delete mode 100644 src/main/java/com/kwan/springbootkwan/controller/SystemController.java
create mode 100644 src/main/resources/templates/socket1.html
diff --git a/pom.xml b/pom.xml
index 3728a99..17c3b12 100644
--- a/pom.xml
+++ b/pom.xml
@@ -221,6 +221,12 @@
spring-boot-starter-websocket
2.6.6
+
+
+ org.springframework.boot
+ spring-boot-starter-thymeleaf
+ 3.1.2
+
diff --git a/src/main/java/com/kwan/springbootkwan/SpringBootKwanApplication.java b/src/main/java/com/kwan/springbootkwan/SpringBootKwanApplication.java
index 1aa0afa..750966a 100644
--- a/src/main/java/com/kwan/springbootkwan/SpringBootKwanApplication.java
+++ b/src/main/java/com/kwan/springbootkwan/SpringBootKwanApplication.java
@@ -4,8 +4,10 @@ import org.springframework.batch.core.configuration.annotation.EnableBatchProces
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.web.socket.config.annotation.EnableWebSocket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
+@EnableWebSocket
@EnableSwagger2
@EnableScheduling
@EnableBatchProcessing
diff --git a/src/main/java/com/kwan/springbootkwan/config/WebSocketConfig.java b/src/main/java/com/kwan/springbootkwan/config/WebSocketConfig.java
index ee016f6..7980fcf 100644
--- a/src/main/java/com/kwan/springbootkwan/config/WebSocketConfig.java
+++ b/src/main/java/com/kwan/springbootkwan/config/WebSocketConfig.java
@@ -4,7 +4,6 @@ import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.server.standard.ServerEndpointExporter;
-
/**
* 开启websocket的支持
*
@@ -12,6 +11,7 @@ import org.springframework.web.socket.server.standard.ServerEndpointExporter;
* @version : 2.2.0
* @date : 2023/8/26 16:45
*/
+
@Configuration
public class WebSocketConfig {
@Bean
diff --git a/src/main/java/com/kwan/springbootkwan/controller/SystemController.java b/src/main/java/com/kwan/springbootkwan/controller/SystemController.java
deleted file mode 100644
index 1950674..0000000
--- a/src/main/java/com/kwan/springbootkwan/controller/SystemController.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package com.kwan.springbootkwan.controller;
-
-import com.kwan.springbootkwan.service.WebSocketServer;
-import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.ResponseBody;
-import org.springframework.web.servlet.ModelAndView;
-
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.Map;
-
-@Controller("web_Scoket_system")
-@RequestMapping("/api/socket")
-public class SystemController {
- //页面请求
- @GetMapping("/index/{userId}")
- public ModelAndView socket(@PathVariable String userId) {
- ModelAndView mav = new ModelAndView("/socket1");
- mav.addObject("userId", userId);
- return mav;
- }
-
- //推送数据接口
- @ResponseBody
- @RequestMapping("/socket/push/{cid}")
- public Map pushToWeb(@PathVariable String cid, String message) {
- Map result = new HashMap<>();
- try {
- WebSocketServer.sendInfo(message, cid);
- result.put("code", cid);
- result.put("msg", message);
- } catch (IOException e) {
- e.printStackTrace();
- }
- return result;
- }
-}
diff --git a/src/main/java/com/kwan/springbootkwan/filter/TimeFilter.java b/src/main/java/com/kwan/springbootkwan/filter/TimeFilter.java
index fd8064e..98dff4a 100644
--- a/src/main/java/com/kwan/springbootkwan/filter/TimeFilter.java
+++ b/src/main/java/com/kwan/springbootkwan/filter/TimeFilter.java
@@ -18,7 +18,7 @@ public class TimeFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
- log.info("先执行:接口执行时间");
+// log.info("先执行:接口执行时间");
chain.doFilter(request, response);
}
}
diff --git a/src/main/java/com/kwan/springbootkwan/service/WebSocketServer.java b/src/main/java/com/kwan/springbootkwan/service/WebSocketServer.java
index fe84608..6c5d9a7 100644
--- a/src/main/java/com/kwan/springbootkwan/service/WebSocketServer.java
+++ b/src/main/java/com/kwan/springbootkwan/service/WebSocketServer.java
@@ -1,6 +1,5 @@
package com.kwan.springbootkwan.service;
-import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import javax.websocket.OnClose;
@@ -8,126 +7,72 @@ import javax.websocket.OnError;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
-import javax.websocket.server.PathParam;
import javax.websocket.server.ServerEndpoint;
import java.io.IOException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
import java.util.concurrent.CopyOnWriteArraySet;
@Component
-@Slf4j
-@ServerEndpoint(value = "/api/websocket/{sid}")
+@ServerEndpoint("/websocket")
public class WebSocketServer {
-
- //静态变量,用来记录当前在线连接数。应该把它设计成线程安全的。
- private static int onlineCount = 0;
- //concurrent包的线程安全Set,用来存放每个客户端对应的MyWebSocket对象。
- private static CopyOnWriteArraySet webSocketSet = new CopyOnWriteArraySet<>();
-
- //与某个客户端的连接会话,需要通过它来给客户端发送数据
+ //准备一个内部安全的集合 存放所有用户的websocket服务
+ private static CopyOnWriteArraySet wsset = new CopyOnWriteArraySet<>();
private Session session;
- //接收sid
- private String sid = "";
-
- /**
- * 连接建立成功调用的方法
- */
@OnOpen
- public void onOpen(Session session, @PathParam("sid") String sid) {
+ public void opOpen(Session session) {
this.session = session;
- webSocketSet.add(this); //加入set中
- this.sid = sid;
- addOnlineCount(); //在线数加1
- try {
- sendMessage("conn_success");
- log.info("有新窗口开始监听:" + sid + ",当前在线人数为:" + getOnlineCount());
- } catch (IOException e) {
- log.error("websocket IO Exception");
- }
- }
+ //将自身填充到set集合中 这个集合是所有客户端websocket的集合
+
+ wsset.add(this);
+// sendMsg();
- /**
- * 连接关闭调用的方法
- */
- @OnClose
- public void onClose() {
- webSocketSet.remove(this); //从set中删除
- subOnlineCount(); //在线数减1
- //断开连接情况下,更新主板占用情况为释放
- log.info("释放的sid为:" + sid);
- //这里写你 释放的时候,要处理的业务
- log.info("有一连接关闭!当前在线人数为" + getOnlineCount());
}
- /**
- * 收到客户端消息后调用的方法
- *
- * @ Param message 客户端发送过来的消息
- */
- @OnMessage
- public void onMessage(String message, Session session) {
- log.info("收到来自窗口" + sid + "的信息:" + message);
- //群发消息
- for (WebSocketServer item : webSocketSet) {
- try {
- item.sendMessage(message);
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
+ @OnClose
+ public void onClose() {
+ //将自己从set集合中删除
+ wsset.remove(this);
}
- /**
- * @ Param session
- * @ Param error
- */
@OnError
public void onError(Session session, Throwable error) {
- log.error("发生错误");
- error.printStackTrace();
+ System.out.println(this + "发生错误了");
}
- /**
- * 实现服务器主动推送
- */
- public void sendMessage(String message) throws IOException {
- this.session.getBasicRemote().sendText(message);
+ //客户端发来消息
+ @OnMessage
+ public void onMessage(String clientMsg, Session session) {
+ System.out.println("来自客户端的信息+“。。。。。。。。。”===》" + clientMsg);
+ //每隔一秒给你推送一条当前时间信息
+ sendAllClient(clientMsg);
}
- /**
- * 群发自定义消息
- */
- public static void sendInfo(String message, @PathParam("sid") String sid) throws IOException {
- log.info("推送消息到窗口" + sid + ",推送内容:" + message);
-
- for (WebSocketServer item : webSocketSet) {
- try {
- //这里可以设定只推送给这个sid的,为null则全部推送
- if (sid == null) {
-// item.sendMessage(message);
- } else if (item.sid.equals(sid)) {
- item.sendMessage(message);
- }
- } catch (IOException e) {
- continue;
+ private void sendMsg() {
+ try {
+ while (true) {
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ String time = sdf.format(new Date());
+ //发送数据
+ this.session.getBasicRemote().sendText(time);
+ Thread.sleep(1000);
}
+ } catch (IOException e) {
+ e.printStackTrace();
+ } catch (InterruptedException e) {
+ e.printStackTrace();
}
}
- public static synchronized int getOnlineCount() {
- return onlineCount;
- }
-
- public static synchronized void addOnlineCount() {
- WebSocketServer.onlineCount++;
- }
-
- public static synchronized void subOnlineCount() {
- WebSocketServer.onlineCount--;
- }
-
- public static CopyOnWriteArraySet getWebSocketSet() {
- return webSocketSet;
+ private void sendAllClient(String msg) {
+ try {
+ for (WebSocketServer wss : wsset) {
+ wss.session.getBasicRemote().sendText(msg);
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
}
-}
+}
\ No newline at end of file
diff --git a/src/main/resources/application.yaml b/src/main/resources/application.yaml
index 4426832..0e5d39f 100644
--- a/src/main/resources/application.yaml
+++ b/src/main/resources/application.yaml
@@ -1,5 +1,5 @@
server:
- port: 8888
+ port: 8080
servlet:
encoding:
force: true
diff --git a/src/main/resources/index.html b/src/main/resources/index.html
index 20f4396..bea827c 100644
--- a/src/main/resources/index.html
+++ b/src/main/resources/index.html
@@ -1,74 +1,36 @@
-
+
-
-
- Java后端WebSocket的Tomcat实现
-
-
-
-Welcome
-
-
-
-
-
-
+只是接受消息的地方
+
+
+
+
-
-
\ No newline at end of file
+