赞
踩
<!--websocket连接需要使用到的包-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.socket.config.annotation.EnableWebSocket; import org.springframework.web.socket.server.standard.ServerEndpointExporter; /** * @author: tanghaizhi * @CreateTime: 2022/10/13 9:20 * @Description: websocket配置,用于开启websocket支持 */ @Configuration @EnableWebSocket public class WebSocketConfig { @Bean public ServerEndpointExporter serverEndpointExporter(){ return new ServerEndpointExporter(); } }
import lombok.Data; import org.springframework.stereotype.Component; import javax.websocket.OnOpen; import javax.websocket.server.PathParam; import javax.websocket.server.ServerEndpoint; import javax.websocket.*; import java.io.IOException; import java.util.concurrent.CopyOnWriteArraySet; /** * @author: tanghaizhi * @CreateTime: 2022/10/13 9:30 * @Description: */ @Component @Data @ServerEndpoint(value = "/websocket/{client}}") public class WebSocket { //静态变量,用来记录当前在线连接数。应该把它设计成线程安全的。 private static int onlineCount = 0; //concurrent包的线程安全Set,用来存放每个客户端对应的MyWebSocket对象。 //也可以使用线程安全的map,在key中存放客户端连接的id等表唯一的东西,在发消息时可以精确取到和那个客户端的连接,不用群发消息 private static CopyOnWriteArraySet<WebSocket> webSocketSet = new CopyOnWriteArraySet<WebSocket>(); //与某个客户端的连接会话,需要通过它来给客户端发送数据 private Session session; /** * 建立连接时调用 * @param session * @param config */ @OnOpen public void onOpen(Session session, EndpointConfig config){ System.out.println(session + "建立了连接"); System.out.println(session.getRequestURI()); this.session = session; //加入set中 webSocketSet.add(this); } /** * 断开连接时调用 * @param session */ @OnClose public void onClose(Session session) { System.out.println(session + "断开了连接"); webSocketSet.remove(this); } /** * 消息到达时调用 * * @param * @param message * @param session */ @OnMessage public String onMessage(String message, Session session){ System.out.println(message); // try { // session.getBasicRemote().sendText(message); // } catch (IOException e) { // e.printStackTrace(); // } return "{\"taskId\":\"d4as5d4a56sd4\",\"data\":\"码流文件\",\"type\":\"3\"}"; } /** * 发生错误时调用 * * @param session * @param throwable */ @OnError public void onError(Session session, Throwable throwable) { System.out.println("发生错误!"); } public void sendMessage(String message) throws IOException { this.session.getBasicRemote().sendText(message); } /** * 群发消息 * 想主动给客服端推送消息时直接调用这个静态方法 */ public static void sendInfo(String message) throws IOException { for (WebSocket item : webSocketSet) { try { item.sendMessage(message); } catch (IOException e) { continue; } } } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。