马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
SpringBoot3.x整合WebSocket
本文重要先容最新springboot3.x下怎样整合WebSocket.
WebSocket简述
WebSocket 是一种在单个 TCP 毗连上举行全双工通讯的协议,它允许在欣赏器和 服务器之间举行实时的、双向的通讯。相对于传统的基于哀求和相应的 HTTP 协议,WebSocket 提供了一种更有用、更实时的通讯方式,实用于必要实时更新、实时关照和实时交互的应用。
WebSocket 的特点
WebSocket 的一些关键特点包罗:
全双工通讯: WebSocket 允许 服务器和客户端在同一毗连上同时举行双向通讯。这意味着 服务器可以随时向客户端推送数据,而不必期待客户端发送哀求。
恒久毗连: WebSocket 毗连一旦创建,会不绝保持打开状态,不会像传统的 HTTP 毗连那样在每次哀求和相应之后关闭。这镌汰了每次毗连创建和关闭的开销,使通讯更加高效。
低耽误: 由于毗连保持打开状态,WebSocket 通讯具有较低的耽误,实用于实时性要求较高的应用,如实时谈天、实时数据更新等。
少量的数据互换: 与 HTTP 哀求和相应相比,WebSocket 数据互换的开销较小。WebSocket 的帧头相对较小,因此有用载荷的比例更高。
兼容性: 当代欣赏器和大多数服务器支持 WebSocket。别的,WebSocket 协议还界说了一个子协议 STOMP(Streaming Text Oriented Messaging Protocol),用于更高级的消息转达和订阅 功能。
安全性: 与其他网络通讯协议一样,WebSocket 通讯也必要一些 安全性的思量。可以利用 加密协议(如 TLS)来掩护数据在网络传输中的 安全性。
实战范例
添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
<version>3.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 Set<WebSocketSession> 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 {
Map<String, 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");
}
}
|