Как принудительно выйти из системы или обновить страницу пользователя в веб-сокете Spring / Stomp - PullRequest
0 голосов
/ 22 мая 2019

Я новичок в Spring, и это может быть основной задачей, но после того, как я настроил весеннюю загрузку с помощью stomp websocket, интерактивная веб-страница завершена, и я могу поместить объект 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 голосов
/ 23 мая 2019

Я не уверен, что полностью понимаю ваш вопрос, но если вы хотите обновить страницу вместо нажатия json, просто замените location.reload(); на функцию обратного вызова subscribe, которая является вторым аргументом.

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

в соответствии с документацией Клиент отправит кадр STOMP SUBSCRIBE на сервер и зарегистрирует обратный вызов.Каждый раз, когда сервер отправляет сообщение клиенту, клиент, в свою очередь, вызывает обратный вызов с объектом Frame STOMP, соответствующим сообщению:

, что означает, что ваше обновление будет вызвано после отправки pushподписчикам.

...