前端:

sockjs-client v1.0.0
stomp.js v2.3.3
 
import React, { Component } from 'react';
import { withRouter } from 'react-router-dom';
import { Modal, Button, message, notification } from 'antd';


let socket;
let stompClient = null;
let origin = 'xxx';


class Dialog extends Component {
  constructor(props) {
    super(props);
    this.state = {
      id:'',
      connectStatus: false,
    };
  }

  componentDidMount() {
    this.connect();
  }

  componentWillUnmount() {
    
  }

  connect() {
    socket = new window.SockJS(`${origin}/xxx`, [], {
      transports: 'websocket',
    });
    stompClient = window.Stomp.over(socket);
    stompClient.debug = null; //禁用调试功能
    stompClient.heartbeat.incoming = 10000;
    stompClient.heartbeat.outgoing = 20000;
    stompClient.connect({}, frame => {
      this.setState({ connectStatus: true }); //设置连接状态
      stompClient.send('/app/reception', { priority: 9 }, this.state.id);
      stompClient.subscribe('/topic/reception/' + this.state.id, reception => {
        let receptionInfo = JSON.parse(reception.body);
      });
    });
  //断网,锁屏,都会走到onclose   socket.onclose
= () => { this.disconnect(); }; } disconnect() { if (stompClient !== null) { //主动关闭连接 stompClient.disconnect(); } this.setState({ connectStatus: false, }); setTimeout(() => { this.connect(); }, 1500); //1.5S后重连 } } }