美文网首页
Springboot WebSocket STOMP协议

Springboot WebSocket STOMP协议

作者: never_b6a7 | 来源:发表于2021-07-20 13:57 被阅读0次

1.pom文件

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-websocket</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

2.配置

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketSTMPconfiguration extends AbstractWebSocketMessageBrokerConfigurer {
    @Override
    //注册STOMP协议的节点(endpoint),并映射指定的url
    public void registerStompEndpoints(StompEndpointRegistry registry) {
        //注册一个STOMP的endpoint,并指定使用SockJS协议
        registry.addEndpoint("/endpointOyzc").setAllowedOrigins("*").withSockJS();
    }
    @Override
    //配置消息代理(Message Broker)
    public void configureMessageBroker(MessageBrokerRegistry registry) {
        //点对点应配置一个/user消息代理,广播式应配置一个/topic消息代理
        registry.enableSimpleBroker("/topic","/user");
        //点对点使用的订阅前缀(客户端订阅路径上会体现出来),不设置的话,默认也是/user/
        registry.setUserDestinationPrefix("/user");
    }
}

3.websocket代码

@Component
@Slf4j
public class WebSocketSTOMPController {
    @Autowired
    private SimpMessagingTemplate template;

    //广播推送消息
    @Scheduled(fixedRate = 3000)   // 每3秒钟执行一次,需要在 程序入口 @EnableScheduling,及该类添加注解 @Component
    public void sendTopicMessage() {
        System.out.println("后台广播推送!");
        User user=new User();
        //user.setUserName("oyzc");
        user.setReal_name("testusername123");
        user.setAccount("testaccount");
        //user.setAge(10);
        this.template.convertAndSendToUser("123abc","/queue/getResponse",user);
    }
}

3.使用

npm install stompjs 
npm install sockjs-client

<script>
import SockJS from  'sockjs-client';
import  Stomp  from 'stompjs';
export default {
    data(){
        return{
             path:"ws://x.x.x.x:8900/test",
            socket:""
        }
    },
    mounted(){
        this._initwebscoket()
    },
    methods:{
        _initwebscoket(){
            if(typeof(WebSocket) === "undefined"){
                alert("您的浏览器不支持socket")
            }else{
                var socket = new SockJS('http://x.x.x.x:8900/endpointOyzc'); 
                var stompClient = Stomp.over(socket);//使用STMOP子协议的WebSocket客户端
        stompClient.connect({},function(frame){//连接WebSocket服务端         
            console.log('Connected:' + frame);
            //通过stompClient.subscribe订阅/topic/getResponse 目标(destination)发送的消息
            stompClient.subscribe('/user/123abc/queue/getResponse',function(response){
                console.log(response)
                var code=JSON.parse(response.body); 
                console.log(code)                               
                //showResponse(code)                
            });
        });
            }
        }}}
</script>

注意:前端先建立连接后,在调用后端接口出发 发送socket消息。避免造成接收不到消息

相关文章

网友评论

      本文标题:Springboot WebSocket STOMP协议

      本文链接:https://www.haomeiwen.com/subject/mwolmltx.html