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:Websocket
、Spring Security
、Lombok
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 } }
@EnableWebSocketMessageBroker
开启Websocket消息代理的支持,包含给我们配置了消息发送模板SimpMessagingTemplate
的Bean;- 通过实现
WebSocketMessageBrokerConfigurer
接口并重载其方法配置Websocket消息代理; - 通过
configureMessageBroker
方法配置Websocket消息代理; - 配置消息代理的终点,客户端可订阅监听终点获取信息;
- 配置消息处理器(
@MessageMapping
注解的 方法)的前缀; - 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(