Spring Boot 2.x实战95 - 事件驱动4 - Websocket之STOMP Websocket

4.Websocket

在HTTP协议下,我们可以通过Websocket进行服务端和客户端进行全工通讯,即客户端和服务端都可通过通道直接向彼此发送数据。当我们使用STOMP的时候,应用作为所有连接客户端的消息代理,当然我们使用支持STOMP协议的第三方消息代理如RabbitMQ来负责。

4.1 STOMP Websocket

我们可以在Websockets之上使用STOMP(Simple/Streaming Text Oriented Message Protocol)协议进行交互。

4.1.1 新建应用

新建应用,信息如下:

Group:top.wisely

Artifact:learning-websocket

Dependencies:WebsocketSpring SecurityLombok

build.gradle文件中的依赖如下:

dependencies {
   
	implementation 'org.springframework.boot:spring-boot-starter-websocket'
	implementation 'org.springframework.boot:spring-boot-starter-security'
	compileOnly 'org.projectlombok:lombok'
	annotationProcessor 'org.projectlombok:lombok'
  //...
}
4.1.2 示例
  • 配置STOMP Websocket

    @Configuration
    @EnableWebSocketMessageBroker //1
    public class WebsocketConfig implements WebSocketMessageBrokerConfigurer {
          //2
        @Override
        public void configureMessageBroker(MessageBrokerRegistry registry) {
          //3
            registry.enableSimpleBroker("/topic"); //4
            registry.setApplicationDestinationPrefixes("/app"); //5
        }
    
        @Override
        public void registerStompEndpoints(StompEndpointRegistry registry) {
          
            registry.addEndpoint("/endpoint").withSockJS(); //6
        }
    
    }
    
    1. @EnableWebSocketMessageBroker开启Websocket消息代理的支持,包含给我们配置了消息发送模板SimpMessagingTemplate的Bean;
    2. 通过实现WebSocketMessageBrokerConfigurer接口并重载其方法配置Websocket消息代理;
    3. 通过configureMessageBroker方法配置Websocket消息代理;
    4. 配置消息代理的终点,客户端可订阅监听终点获取信息;
    5. 配置消息处理器(@MessageMapping注解的 方法)的前缀;
    6. WebSocket的端点地址,提供SockJS后备支持;
  • 配置安全

    @Configuration
    public class SecurityConfig extends WebSecurityConfigurerAdapter {
         
    
        @Bean
        PasswordEncoder passwordEncoder(){
         
            return new BCryptPasswordEncoder();
        }
        @Override
        protected void configure(AuthenticationManagerBuilder auth) throws Exception {
         //1
            auth.inMemoryAuthentication()
                        .withUser("wyf")
                        .password(passwordEncoder().encode("111111"))
                        .roles("USER")
                    .and(
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
STOMP(Simple Text Oriented Messaging Protocol)是一种基于文本的协议,用于在客户端和服务器之间进行异步通信。它是WebSocket协议的一个子协议,提供了一种简单的消息传递模式,支持点对点和发布/订阅模式。 Spring Boot提供了一个名为spring-boot-starter-websocket的starter,它为我们提供了使用STOMP的基本配置和依赖。这个starter依赖了spring-messaging和spring-websocket模块,以及一个STOMP消息代理。 底层原理如下: 1. 客户端通过WebSocket连接到服务器,并发送CONNECT帧。 2. 服务器接受连接请求,并返回CONNECTED帧,表示连接已建立。 3. 客户端发送SUBSCRIBE帧,请求订阅一个目的地(destination)。 4. 服务器接受订阅请求,并返回SUBSCRIBED帧,表示订阅成功。 5. 当有消息到达目的地时,服务器将消息发送给所有订阅该目的地的客户端。服务器发送的消息采用MESSAGE帧,其中包含消息头、消息体和目的地。 6. 客户端可以随时取消订阅,发送UNSUBSCRIBE帧。 7. 当客户端关闭连接时,客户端发送DISCONNECT帧,关闭连接。 在Spring Boot应用中,我们可以使用@MessageMapping注解定义STOMP的请求处理器,同时使用@SendTo注解定义发送消息的目的地。当有客户端发送消息到指定目的地时,就会调用@MessageMapping注解所标注的方法进行处理,并将处理结果发送到@SendTo注解所标注的目的地。 总之,STOMP是一个基于文本的协议,提供了一种简单的消息传递模式,Spring Boot通过提供spring-boot-starter-websocket starter和相关注解,使得我们可以轻松地使用STOMP进行异步通信。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值