From f66b758cfa75ddaa7c50a8d6ba015e4af9c52c4a Mon Sep 17 00:00:00 2001
From: tangzy <tangzy123456>
Date: Tue, 23 Mar 2021 08:40:01 +0800
Subject: [PATCH] 1.webscoket
---
blade-service/blade-jfpts/pom.xml | 9 ++++
blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/webscoket/WebSocket.java | 75 +++++++++++++++++++++++++++++++++++++
2 files changed, 84 insertions(+), 0 deletions(-)
diff --git a/blade-service/blade-jfpts/pom.xml b/blade-service/blade-jfpts/pom.xml
index b8415e3..6cea5f3 100644
--- a/blade-service/blade-jfpts/pom.xml
+++ b/blade-service/blade-jfpts/pom.xml
@@ -58,6 +58,15 @@
<groupId>org.springblade</groupId>
<artifactId>blade-starter-oss-qiniu</artifactId>
</dependency>
+ <dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter-websocket</artifactId>
+ <version>2.0.4.RELEASE</version>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter-thymeleaf</artifactId>
+ </dependency>
</dependencies>
</project>
diff --git a/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/webscoket/WebSocket.java b/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/webscoket/WebSocket.java
new file mode 100644
index 0000000..48a4010
--- /dev/null
+++ b/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/webscoket/WebSocket.java
@@ -0,0 +1,75 @@
+package org.springblade.jfpt.webscoket;
+
+import org.springframework.stereotype.Component;
+
+import javax.websocket.*;
+import javax.websocket.server.PathParam;
+import javax.websocket.server.ServerEndpoint;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+@ServerEndpoint("/websocket/{pageCode}")
+@Component
+public class WebSocket {
+
+ private static final String loggerName=WebSocket.class.getName();
+ //concurrent包的线程安全Set,用来存放每个客户端对应的MyWebSocket对象。若要实现服务端与单一客户端通信的话,可以使用Map来存放,其中Key可以为用户标识
+ public static Map<String, List<Session>> electricSocketMap = new ConcurrentHashMap<String, List<Session>>();
+
+ /**
+ * 连接建立成功调用的方法
+ *
+ * @param session 可选的参数。session为与某个客户端的连接会话,需要通过它来给客户端发送数据
+ */
+ @OnOpen
+ public void onOpen(@PathParam("pageCode") String pageCode, Session session) {
+ List<Session> sessions = electricSocketMap.get(pageCode);
+ if(null==sessions){
+ List<Session> sessionList = new ArrayList<>();
+ sessionList.add(session);
+ electricSocketMap.put(pageCode,sessionList);
+ }else{
+ sessions.add(session);
+ }
+ }
+
+ /**
+ * 连接关闭调用的方法
+ */
+ @OnClose
+ public void onClose(@PathParam("pageCode") String pageCode,Session session) {
+ if (electricSocketMap.containsKey(pageCode)){
+ electricSocketMap.get(pageCode).remove(session);
+ }
+ }
+
+ /**
+ * 收到客户端消息后调用的方法
+ *
+ * @param message 客户端发送过来的消息
+ * @param session 可选的参数
+ */
+ @OnMessage
+ public void onMessage(String message, Session session) {
+ System.out.println("websocket received message:"+message);
+ try {
+ session.getBasicRemote().sendText("这是推送测试数据!您刚发送的消息是:"+message);
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ /**
+ * 发生错误时调用
+ *
+ * @param session
+ * @param error
+ */
+ @OnError
+ public void onError(Session session, Throwable error) {
+ System.out.println("发生错误");;
+ }
+}
--
Gitblit v1.9.3