spring boot中使用web socket显示实时消息

一、在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("服务端返回消息"));
    }
}

猜你喜欢

转载自blog.csdn.net/wm_zq/article/details/80591684