websocket(三)–基于sockjs和stomp实现点对点通信
一、简介
这里将介绍基于sockjs和stomp实现的点对点通信,即客户端发消息到服务端,服务端处理后返回消息给原客户端(或者发送消息给指定客户端),点对点通信,不是广播。由于点对点通信和广播有类似,这里仅对需要使用到的新内容进行介绍,以及完整的点对点通信示例。
二、新知识点
2.1 org.springframework.messaging.simp.SimpMessagingTemplate
提供给用户发送消息的方法。
2.2 @SendToUser
点对点通信中,客户端订阅的地址。
2.3 java.security.Principal
用户身份标识,需要在WebSocketMessageBrokerConfigurer.configureClientInboundChannel方法设置用户信息。
2.4 org.springframework.messaging.simp.stomp.StompHeaderAccessor
请求消息头信息。
三、完整示例
3.1 添加maven依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
3.2 spring mvc配置
package com.dragon.single_talk.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
/
* 添加静态文件
*
* @param registry
*/
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/static/").addResourceLocations("classpath:/static/");
}
}
3.3 websocket配置
package com.dragon.single_talk.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.messaging.Message;
import org.springframework.messaging.MessageChannel;
import org.springframework.messaging.simp.config.ChannelRegistration;
import org.springframework.messaging.simp.config.MessageBrokerRegistry;
import org.springframework.messaging.simp.stomp.StompCommand;
import org.springframework.messaging.simp.stomp.StompHeaderAccessor;
import org.springframework.messaging.support.ChannelInterceptor;
import org.springframework.messaging.support.MessageHeaderAccessor;
import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker;
import org.springframework.web.socket.config.anno