一、在spring boot中使用web socket进行实时消息显示
二、pom.xml中的依赖
<!-- spring boot 中web socket服务依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
三、自定义一个web socket映射配置,使用@Configuration和@EnableWebSocket注解,并且实现WebSocketConfigurer接口;
/**
* @ClassName: MonitorWebSocketConfiguration.java
* @Description: web socket自定义配置;
* @author wangmin
* @date 2018年6月5日-上午9:48:58
* @version 1.0V
*/
@Configuration
@EnableWebSocket
public class MonitorWebSocketConfiguration implements WebSocketConfigurer {
@Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
registry.addHandler(webSocketHandler(), "/web")//请求地址
.setAllowedOrigins("*")
.addInterceptors(new MonitorWebSocketInterceptor());
}
@Bean
public WebSocketHandler webSocketHandler () {
return new WebSocketController();
}
}
四、请求拦截器实现HandshakeInterceptor接口;
/**
* @ClassName: MonitorWebSocketInterceptor.java
* @Description: web socket请求拦截器实现;
* @author wangmin
* @date 2018年6月5日-上午9:52:28
* @version 1.0V
*/
public class MonitorWebSocketInterceptor implements HandshakeInterceptor {
@Override
public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler,
Map<String, Object> attributes) throws Exception {
if (request instanceof ServletServerHttpRequest) {
ServletServerHttpRequest servletServerHttpRequest = (ServletServerHttpRequest)request;
attributes.put("WEBSOCKET_USERID", servletServerHttpRequest.getServletRequest().getSession().getId());
attributes.put("USER_SESSION", servletServerHttpRequest.getServletRequest().getSession());
return true;
} else {
return false;
}
}
@Override
public void afterHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler,
Exception exception) {
}
}
五、web socket请求的controller要继承TextWebSocketHandler类;
/**
* @ClassName: WebSocketController.java
* @Description: web socket请求controller;
* @author wangmin
* @date 2018年6月5日-上午9:56:10
* @version 1.0V
*/
public class WebSocketController extends TextWebSocketHandler {
/**
* 请求发送消息的时候,调用该方法;
*/
@Override
protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
// 获取web socket发送过来的消息
String msg = message.getPayload();
// 服务端返回消息操作
session.sendMessage(new TextMessage("服务端返回消息"));
}
}