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

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 {@Overridepublic void configureMessageBroker(MessageBrokerRegistry registry) {registry.enableSimpleBroker("/topic");registry.setApplicationDestinationPrefixes("/app");}@Overridepublic 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 delayreturn 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通信的开发。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/3334.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis 主从复制 哨兵 集群

Redis 主从复制 哨兵 集群 一、Redis 主从复制1.1 Redis 主从复制介绍1.2 主从复制的作用1.3 主从复制的流程 二、搭建Redis 主从复制2.1 安装 Redis2.2 创建redis工作目录2.3 环境变量2.4 定义systemd服务管理脚本2.5 修改 Redis 配置文件&#xff08;Master节点操作&#xff…

ModaHub魔搭社区:向量数据库MIlvus服务端配置(三)

目录 gpu 区域 logs 区域 metric_config 区域 gpu 区域 在该区域选择是否在 Milvus 里启用 GPU 用于搜索和索引创建。同时使用 CPU 和 GPU 可以达到资源的最优利用&#xff0c;在特别大的数据集里做搜索时性能更佳。 若要切换到 CPU-only 模式&#xff0c;只要将 enable 设…

设计模式学习之代理模式

设计模式系列往期文章 设计模式学习之策略模式设计模式学习之策略模式在前端的应用设计模式学习之简单工厂模式设计模式学习之工厂方法模式设计模式学习之抽象工厂模式设计模式学习之策略模式和简单工厂模式的对比设计模式学习之观察者模式设计模式学习之模板方法模式 代理模…

Nginx-反向代理详解

本文已收录于专栏 《中间件合集》 目录 概念说明什么是Nginx什么是反向代理 功能介绍配置过程1.修改nginx配置文件修改全局模块修改工作模块修改HTTP模块 2.保存配置文件3.重启配置文件4.查看配置文件是否重启成功 配置反向代理的好处总结提升 概念说明 什么是Nginx Nginx 是一…

《企业性能测试:体系构建、落地指导与案例解读》——小解送书第四期

目录 介绍 抽奖 介绍 软件系统性能的重要性无须多言&#xff0c;没有哪个用户可以忍受一个响应缓慢的网站或者反应迟钝的软件。软件性能是用户体验的核心。大部分用户可能对软件性能并不了解&#xff0c;但他们永远想使用响应更迅速的软件。所以&#xff0c;性能是评估一个软…

R语言多元数据统计分析在生态环境中的实践应用

生态环境领域研究中常常面对众多的不同类型的数据或变量&#xff0c;当要同时分析多个因变量&#xff08;y&#xff09;时需要用到多元统计分析&#xff08;multivariate statistical analysis&#xff09;。多元统计分析内容丰富&#xff0c;应用广泛&#xff0c;是非常重要和…

SQL开源替代品,诞生了

发明 SQL 的初衷之一显然是为了降低人们实施数据查询计算的难度。SQL 中用了不少类英语的词汇和语法&#xff0c;这是希望非技术人员也能掌握。确实&#xff0c;简单的 SQL 可以当作英语阅读&#xff0c;即使没有程序设计经验的人也能运用。 然而&#xff0c;面对稍稍复杂的查…

【架构治理工具】在代码存储库中记录软件架构

Markdown 是一种标准的简单语法&#xff0c;用于创建具有专业外观的文档。它比 HTML 更简单&#xff0c;无需专门的编写编辑器即可进行管理。Git配置管理工具也支持markdown格式。在 Git 环境中&#xff0c;markdown 一般用于项目的简单介绍和构建说明。&#xff08;自述文件&a…

Vue 项目中使用WebSocket 消息推送

一、功能需求 1.这是我在后台管理项目中使用到的&#xff0c;主要的作用是搞一个消息提醒的功能。 2.主要有右上角的提示和有下角的消息弹框。 3.主要实现的功能是如果用户有未读的消息&#xff0c;那么首次登录就弹框&#xff0c;如果用户关闭了页面&#xff0c;那么再次刷新…

valgrind检测内存泄漏、越界访问、野指针访问实验

前言 本次测试包括&#xff0c;检测无误的代码&#xff0c;检测内存泄漏&#xff0c;检测访问越界&#xff0c;检测野指针&#xff0c;检测访问已经释放(已经被free)的内存。 一 安装valgrind sudo apt install valgrind 二 无错误 #include <stdio.h> #include <…

GitHub+PicGo制作个人图床

目录 一、前言 二、新建Github仓库 ​编辑 三、生成token 四、配置PicGo 五、上传图片 六、新版的PicGo出了很多新功能大家可以探索一下。​编辑 一、前言 PicGo是一个用于快速上传图片并获取图片 URL 链接的工具:Releases Molunerfinn/PicGo GitHub GitHub是一个在…

pytorch动态调整学习率torch.optim.lr_scheduler import MultiStepLR

from torch.optim.lr_scheduler import MultiStepLR 简单来说&#xff0c;就是分阶段调整学习率&#xff0e; 用法&#xff1a; model ANet(classes5) #加载模型 optimizer optim.SGD(params model.parameters(), lr0.05) #优化方法使用SGD#在指定的epoch值&#x…