SpringBoot3.x整合WebSocket

[复制链接]
发表于 2025-10-29 19:24:51 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
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");

    }

}


回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表