如何在spring / stomp websocket中推送用户注销或刷新用户页面

时间:2019-05-22 08:19:23

标签: spring-boot stomp

我是Spring的新手,这可能是一项基本任务,但是在我用stomp websocket设置spring boot之后,完成了一个交互式网页,我可以将json对象推送到客户端网页,但是我的目标是仅刷新客户端/用户页面,我不需要json传输。 我只想在管理员注销用户后刷新用户页面。

这是我的app.js

    var stompClient = null;

    function setConnected(connected) {
        $("#connect").prop("disabled", connected);
        $("#disconnect").prop("disabled", !connected);

        if (connected) {
            $("#conversation").show();
        } else {
            $("#conversation").hide();
        }
        $("#greetings").html("");
    }

    function connect() {
        var socket = new SockJS('/vira-websocket');
        stompClient = Stomp.over(socket);
        stompClient.connect({}, function (frame) {
            setConnected(true);
            stompClient.subscribe('/topic/greetings', function (greeting) {
                showGreeting(JSON.parse(greeting.body).content);
            });
        });
    }
    function disconnect() {
        if (stompClient !== null) {
            stompClient.disconnect();
        }
        setConnected(false);
    }
    function sendName() {
        stompClient.send("/app/hello", {}, JSON.stringify({'name': $("#name").val()}));
    }

    $(function () {
        $( "form" ).on('submit', function (e) {e.preventDefault();});
        $( "#connect" ).click(function() { connect(); });
        $( "#disconnect" ).click(function() { disconnect(); });
        $( "#send" ).click(function() { sendName(); });
    });

我的配置

    @Configuration
    @EnableWebSocketMessageBroker
    public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {
        @Override
        public void configureMessageBroker(MessageBrokerRegistry config) {
            config.enableSimpleBroker("/topic");
            config.setApplicationDestinationPrefixes("/app");
        }
        @Override
        public void registerStompEndpoints(StompEndpointRegistry registry) {
            registry.addEndpoint("/vira-websocket").withSockJS();
        }
    }

和控制器

@Controller
public class GreetingController {
    @MessageMapping("/hello")
    @SendTo("/topic/greetings")
    public Greeting greeting(HelloMessage message) throws Exception {
        Thread.sleep(3000); // simulated delay
        return new Greeting("Hello, " + message.getName() + "!");
    }
}

1 个答案:

答案 0 :(得分:0)

我不确定我是否完全理解您的问题,但是如果您想刷新页面而不是推送json,只需将location.reload();替换为第二个参数subscribe的回调。< / p>

function connect() {
        var socket = new SockJS('/vira-websocket');
        stompClient = Stomp.over(socket);
        stompClient.connect({}, function (frame) {
            setConnected(true);
            stompClient.subscribe('/topic/greetings', location.reload());
        });
    }
  

according to the documentation客户端将发送STOMP   SUBSCRIBE帧到服务器并注册回调。每次   服务器向客户端发送消息,客户端将依次调用   带有与消息相对应的STOMP Frame对象的回调:

这意味着您将推送发送给订阅的用户后,将调用刷新。