网站域名和邮箱域名,天元建设集团有限公司第十建筑工程公司,软件大全,百度快照网址SpringBoot3.x整合WebSocket
本文主要介绍最新springboot3.x下如何整合WebSocket.
WebSocket简述
WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议#xff0c;它允许在浏览器和服务器之间进行实时的、双向的通信。相对于传统的基于请求和响应的 HTTP 协议#xff…SpringBoot3.x整合WebSocket
本文主要介绍最新springboot3.x下如何整合WebSocket.
WebSocket简述
WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议它允许在浏览器和服务器之间进行实时的、双向的通信。相对于传统的基于请求和响应的 HTTP 协议WebSocket 提供了一种更有效、更实时的通信方式适用于需要实时更新、实时通知和实时交互的应用。 WebSocket 的特点
WebSocket 的一些关键特点包括
全双工通信 WebSocket 允许服务器和客户端在同一连接上同时进行双向通信。这意味着服务器可以随时向客户端推送数据而不必等待客户端发送请求。
持久连接 WebSocket 连接一旦建立会一直保持打开状态不会像传统的 HTTP 连接那样在每次请求和响应之后关闭。这减少了每次连接建立和关闭的开销使通信更加高效。
低延迟 由于连接保持打开状态WebSocket 通信具有较低的延迟适用于实时性要求较高的应用如实时聊天、实时数据更新等。
少量的数据交换 与 HTTP 请求和响应相比WebSocket 数据交换的开销较小。WebSocket 的帧头相对较小因此有效载荷的比例更高。
兼容性 现代浏览器和大多数服务器支持 WebSocket。此外WebSocket 协议还定义了一个子协议 STOMPStreaming Text Oriented Messaging Protocol用于更高级的消息传递和订阅功能。
安全性 与其他网络通信协议一样WebSocket 通信也需要一些安全性的考虑。可以使用加密协议如 TLS来保护数据在网络传输中的安全性。 实战范例 添加依赖 dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-websocket/artifactId version3.4.2/version /dependency 配置WebSocket
创建一个配置类来注册WebSocket端点和处理程序。 /** * 基本功能: * program:demo-websocket * author:Jet * create:2025-02-12 14:14:28 **/
import cn.jet.demowebsocket.wshandler.EcWebSocketHandler;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.config.annotation.EnableWebSocket;
import org.springframework.web.socket.config.annotation.WebSocketConfigurer;
import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry; Configuration
EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer { Override public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) { registry.addHandler(new EcWebSocketHandler(), /ec).setAllowedOrigins(*);// 注意在生产环境中应限制允许的来源 }
}
实现WebSocket处理器 /** * 基本功能: * program:demo-websocket * author:Jet * create:2025-02-12 14:16:59 **/ import cn.jet.demowebsocket.common.EnumHandler;
import cn.jet.demowebsocket.handler.Handler;
import com.fasterxml.jackson.databind.ObjectMapper;
import jakarta.annotation.PostConstruct;
import org.springframework.stereotype.Component;
import org.springframework.web.socket.CloseStatus;
import org.springframework.web.socket.TextMessage;
import org.springframework.web.socket.WebSocketSession;
import org.springframework.web.socket.handler.TextWebSocketHandler; import java.util.HashSet;
import java.util.Map;
import java.util.Set; Component
public class EcWebSocketHandler extends TextWebSocketHandler { private static SetWebSocketSession sessions new HashSet(); private ObjectMapper objectMapper new ObjectMapper(); Override public void afterConnectionEstablished(WebSocketSession session) throws Exception { sessions.add(session); System.out.println(New session added, session id: session.getId()); } Override protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception { MapString, Object param objectMapper.readValue(message.getPayload(), Map.class); System.out.println(from session: session.getId()); String cmd param.get(cmd).toString(); System.out.println(cmd: cmd); session.sendMessage(new TextMessage(Echo: message.getPayload())); } Override public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception { sessions.remove(session); System.out.println(Session closed, session id: session.getId()); } PostConstruct public void init() { System.out.println(WebSocket handler initialized); }
}