Spring Boot中的@EnableWebSocketMessageBroker注解是什么,原理,以及如何使用

WebSocket是一种在Web浏览器和Web服务器之间进行双向通信的技术。在传统的HTTP通信中,客户端向服务器发送请求,服务器响应请求,然后关闭连接。而在WebSocket中,客户端和服务器之间的连接始终保持打开状态,可以随时互相发送消息,实现实时通信。

Spring Boot提供了对WebSocket的支持,通过@EnableWebSocketMessageBroker注解可以快速地启用WebSocket消息代理功能。本文将介绍@EnableWebSocketMessageBroker的原理和使用方法。

@EnableWebSocketMessageBroker注解是什么

@EnableWebSocketMessageBroker是Spring Framework中的一个注解,用于启用WebSocket消息代理功能。该注解可以在Spring Boot应用程序中使用,使得应用程序能够支持WebSocket通信。

@EnableWebSocketMessageBroker注解的原理是通过配置消息代理来支持WebSocket通信。在使用@EnableWebSocketMessageBroker注解之前,必须先定义一个WebSocket配置类,并通过@Configuration注解标记该类为配置类。

在WebSocket配置类中,需要使用@EnableWebSocketMessageBroker注解来启用WebSocket消息代理功能。该注解会自动配置一个WebSocketMessageBrokerConfigurer实例,并将其注册到Spring应用程序上下文中。

WebSocketMessageBrokerConfigurer是Spring框架中用于配置WebSocket消息代理的接口。通过实现该接口,可以配置WebSocket消息代理的相关参数,例如消息代理的地址、消息类型、消息发送和接收的线程池等。

在启用了WebSocket消息代理之后,可以使用@MessageMapping注解来定义WebSocket消息的处理方法。@MessageMapping注解用于指定WebSocket请求的地址,当客户端向该地址发送请求时,会自动调用对应的处理方法进行处理。

下面我们来演示如何使用@EnableWebSocketMessageBroker注解和相关注解来实现WebSocket通信。

步骤1:添加依赖

在使用@EnableWebSocketMessageBroker之前,需要在项目中添加以下依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-websocket</artifactId>
</dependency>

步骤2:定义WebSocket配置类

在项目中定义一个WebSocket配置类,用于配置WebSocket消息代理的相关参数。具体代码如下:

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
    @Override
    public void configureMessageBroker(MessageBrokerRegistry registry) {
        registry.enableSimpleBroker("/topic");
        registry.setApplicationDestinationPrefixes("/app");
    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
        registry.addEndpoint("/ws").withSockJS();

该配置类中使用@EnableWebSocketMessageBroker注解来启用WebSocket消息代理功能,使用configureMessageBroker方法来配置消息代理的相关参数,使用registerStompEndpoints方法来注册Stomp协议的WebSocket端点。

在configureMessageBroker方法中,我们使用enableSimpleBroker方法来配置消息代理的地址,这里我们将消息代理地址设置为"/topic",表示所有以"/topic"开头的消息都会被路由到消息代理上。setApplicationDestinationPrefixes方法用于设置应用程序的目的地前缀,这里我们将其设置为"/app",表示所有以"/app"开头的消息都会被路由到控制器上。

在registerStompEndpoints方法中,我们使用addEndpoint方法来添加WebSocket端点,这里我们将WebSocket端点设置为"/ws",并使用withSockJS方法启用SockJS支持,以便在不支持WebSocket的浏览器上进行通信。

步骤3:定义WebSocket控制器

在项目中定义一个WebSocket控制器,用于处理WebSocket消息。具体代码如下:

@Controller
public class WebSocketController {
    @MessageMapping("/hello")
    @SendTo("/topic/greetings")
    public Greeting greeting(HelloMessage message) throws Exception {
        Thread.sleep(1000); // simulated delay
        return new Greeting("Hello, " +message.getName() + "!");

该控制器中使用@MessageMapping注解来定义WebSocket请求的地址,这里我们将请求地址设置为"/hello",表示当客户端向该地址发送请求时,会自动调用greeting方法进行处理。@SendTo注解用于指定WebSocket响应的地址,当处理方法返回响应时,会自动将响应发送到该地址。

在greeting方法中,我们通过Thread.sleep方法模拟了1秒钟的延迟,并返回一个包含问候语的Greeting对象。

步骤4:编写前端代码

最后,我们需要编写前端代码来与WebSocket进行通信。在这里,我们使用了SockJS和Stomp.js来实现WebSocket通信。具体代码如下:

var stompClient = null;
function connect() {
    var socket = new SockJS('/ws');
    stompClient = Stomp.over(socket);
    stompClient.connect({}, function(frame) {
        console.log('Connected: ' + frame);
        stompClient.subscribe('/topic/greetings', function(greeting) {
            showGreeting(JSON.parse(greeting.body).content);
        });
    });
function disconnect() {
    if (stompClient !== null) {
        stompClient.disconnect();
    console.log("Disconnected");
function sendName() {
    var name = $("#name").val();
    stompClient.send("/app/hello", {}, JSON.stringify({ 'name': name }));
function showGreeting(message) {
    $("#greetings").append("<tr><td>" + message + "</td></tr>");
$(function () {
    $("form").on('submit', function (e) {
        e.preventDefault();
    });
    $("#connect").click(function() { connect(); });
    $("#disconnect").click(function() { disconnect(); });
    $("#send").click(function() { sendName(); });
});

在上述代码中,我们首先定义了一个connect函数来创建WebSocket连接。在连接成功后,我们使用subscribe方法来订阅"/topic/greetings"地址,当有消息到达时,会自动调用showGreeting方法来显示消息。

在sendName函数中,我们通过stompClient.send方法向"/app/hello"地址发送消息,其中包含一个名为"name"的属性,该属性的值为用户输入的姓名。

最后,在页面加载完成后,我们使用jQuery来注册事件监听器,以便在用户单击按钮时调用相关函数。

@EnableWebSocketMessageBroker注解是Spring Boot中用于启用WebSocket消息代理功能的注解。通过配置消息代理和定义WebSocket控制器,可以实现WebSocket通信。在实际应用中,我们可以使用SockJS和Stomp.js来简化WebSocket通信的开发。

在上家公司做IM消息系统的时候,一直是使用 WebSocket 作为收发消息的基础组件,今天就和大家聊聊在 Java 使用 WebSocket 所常见的四种姿势,如果大家以后或者现在碰到有要使用 WebSoocket 的情况可以做个参考。上面的思维导图已经给大家列出了三种使用 WebSocket 的方式,下文会对它们的特点进行一一解读,不同的方式具有不同的特点,我们先按下不表。在这里,我想让大家思考一下我在思维导图列举的第四种做 WebScoket 支持的方案可能是什么?不知道大家能不能猜对,后文将会 仅使用 SpringBoot封装好的服务,并不是使用第三方Netty或者: 底层使用实现: 底层使用Netty实现(没有使用过,不知道具体)官方文档1官方文档2。 WebSocket协议:5分钟从入门到精通 https://www.cnblogs.com/chyingp/p/websocket-deep-in.html WebSocket协议入门介绍 h ttps://www.cnblogs.com/nuccch/p/10947256.html 战斗前准备:新建Spring Boot项目选择Thymeleaf和WebSocket依赖 广播式主要有7大步骤1.配置WebSocket2.编写浏览器向服务端发送消息(服务端用该类接收)3. 编写服务端向浏览器发送消息(服务端用该类发送)4. 编写一个Controller用于模拟发送和接收5.添加脚本6. 编写一个页面来演示7. 配置ViewController 1.配置WebSocket 配置WebSocket.需要在配置类上使用@EnableWebSocketMessageBroker开启WebSock 在现代 Web 应用程序WebSocket 已成为一种流行的通信协议,它允许客户端和服务器之间实时双向通信。在 Spring Boot ,我们可以使用 WebSocketMessageBrokerConfigurer 接口来配置 WebSocket 消息代理,以实现实时通信。在本文,我们将深入探讨 WebSocketMessageBrokerConfigurer 接口,包括它的原理和如何使用。 STOMP协议介绍 STOMP,Streaming Text Orientated Message Protocol,是流文本定向消息协议,是一种为MOM(Message Oriented Middleware,面向消息的间件)设计的简单文本协议。 它提供了一个可互操作的连接格式,允许STOMP客户端与任意STOMP消息代理(Broker)进行交互,类似于OpenWire(一种二进制协议)。 由于其设计简单,很容易开发客户端,因此在多种语言和多种平台上得到广泛应用。其最流行的STOMP消息代理是A 文章目录1. 概述2. WebSocket的诞生的背景、运行机制和抓包分析2.1. Websocket诞生的背景2.2. WebSocket 运行机制2.3. WebSocket抓包分析3. WebSocket 的应用场景、服务端和浏览器的版本要求3.1. 使用websocket的场景3.2. 服务端和浏览器的版本要求4. Spring 内嵌的简单消息代理 和 消息流程图4.1. Simple Broker4.2. 消息流程图5. 在Spring boot集成websocket,并介绍stomp、sock * Defines methods for configuring message handling with simple messaging * protocols (e.g. STOMP) from WebSocket clients. * <p>Typically used to customize the configuration provided via * {@link EnableWebSocketMessageBroker @EnableWebSock. /如果spingboot配置文件配置了server.servlet.context-path,则格式为ws//ip接口启动的端口/server.servlet.context-path的名称/webSocketDemo。//连接到WebSocket的url地址。格式为ws//ip接口启动的端口/webSocketDemo。//连接发生错误的回调方法。//连接成功建立的回调方法。//ws连接断开的回调方法。//接收到消息的回调方法。//将消息显示在网页上。... 本文仓库地址:chat01 一、网页技术发展过程 一开始的网页是静态的html页面,不能进行交互,随后javascript出现,在一定程度上实现了页面的简单交互。不过javascript不能和服务端交互,随后ajax的出现解决了与服务端交互的问题,ajax存在的不足——所有的请求都是由客户端发起的,服务端进行响应,若服务端有最新的消息,则难以发送到客户端去,不过我们一直存在这种实时通讯的需求。 在没有We