Spring boot 使用 WebSocket 的解决方案 包括sockjs stomp

前言:

近日,项目开发中需要用到客户端扫码登录,第一时间想到了几种方案:

  1. Ajax轮询
  2. 长连接
  3. WebSocket
其中的优缺点想必我不用多说小伙伴们也清楚,既然来到这里,一定是想找到SpringBoot使用WebSocket的解决方案,首先说下我的环境:JDK 1.8,Tomcat 8.5,Spring Boot 2.0.1。好了,话不多说,开始吧!


后端:

第一步:添加依赖


    org.springframework.boot
    spring-boot-starter-websocket

第二步:编写WebSocket配置类

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfiguration implements WebSocketMessageBrokerConfigurer {

    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {

        // 注册一个 stomp 终端(这个路径待会js里面会用到)
        // 如果需要跨域,在addEndpoint后面调用 setAllowedOrigins("*")
        registry.addEndpoint("/myEndpoint").withSockJS();

    }

    @Override
    public void configureMessageBroker(MessageBrokerRegistry registry) {

        // 注册多个(参数是可变参数)服务端接收消息前缀(这个路径待会js里面也会用到)
        registry.setApplicationDestinationPrefixes("/receiver");

        // 注册多个(参数是可变参数)服务端发送消息前缀(这个路径待会js里面会结合实现类路径用到)
        registry.enableSimpleBroker("/queueSender", "/topicSender");

    }

}

第三步:编写消息接收/发送实现类

@Slf4j
@Controller
public class WebSocketTestController {

    /**
     * 收到消息并推送给 发送人
     *
     * @param message 浏览器端发送的参数
     * @return 浏览器端接收的内容
     */
    @MessageMapping("/testQueueSend")
    @SendToUser("/queueSender/queueSend")
    public String testReceiveAndQueueSend(String message) {
        log.debug("{} 收到消息: {}", "testReceiveAndQueueSend", message);
        return "收到了消息" + message + ",并且发送给了发送人";
    }

    /**
     * 收到消息并推送给 所有人
     *
     * @param message 浏览器端发送的参数
     * @return 浏览器端接收的内容
     */
    @MessageMapping("/testTopicSend")
    @SendTo("/topicSender/topicSend")
    public String testReceiveAndTopicSend(String message) {
        log.debug("{} 收到消息: {}", "testReceiveAndTopicSend", message);
        return "收到了消息" + message + ",并且发送给了所有人";
    }

}

前端:

第一步及最后一步:ctrl+c, ctrl+v,请看代码




    
    WebSocket测试
    
    
    









好了,文章到此结束,快去试下吧!



你可能感兴趣的:(WebSocket,SpringBoot)