Отправка сообщения клиенту периодически через Spring Web-Socket
Я пытаюсь установить соединение между клиентом и сервером через Spring webSocket, и я делаю это с помощью этой ссылки. Я хочу, чтобы Controller отправлял "привет" клиенту каждые 5 секунд, и клиент каждый раз добавлял его в приветствие. Это класс контроллера:
@EnableScheduling
@Controller
public class GreetingController {
@Scheduled(fixedRate = 5000)
@MessageMapping("/hello")
@SendTo("/topic/greetings")
public Greeting greeting() throws Exception {
Thread.sleep(1000); // simulated delay
System.out.println("scheduled");
return new Greeting("Hello");
}
}
и это функция Connect() в app.jsp:
function connect() {
var socket = new SockJS('/gs-guide-websocket');
stompClient = Stomp.over(socket);
stompClient.connect({}, function (frame) {
setConnected(true);
console.log('Connected: ' + frame);
stompClient.send("/app/hello", {}, JSON.stringify({'name': "connect"}));
stompClient.subscribe('/topic/greetings', function (message) {
console.log("message"+message);
console.log("message"+(JSON.parse(message.body)));
showGreeting(JSON.parse(message.body).content);
});
});
}
когда index.jsp загружается, и я нажимаю кнопку подключения, только один раз приветствует приветствие, как мне заставить клиента показывать "привет" сообщение каждые 5 секунд?
Ответы
Ответ 1
Пожалуйста, обратитесь к этой части документации. То, как вы пытаетесь отправить сообщение, совершенно неверно. Я бы изменил ваш класс следующим образом:
@EnableScheduling
@Controller
public class GreetingController {
@Autowired
private SimpMessagingTemplate template;
@Scheduled(fixedRate = 5000)
public void greeting() {
Thread.sleep(1000); // simulated delay
System.out.println("scheduled");
this.template.convertAndSend("/topic/greetings", "Hello");
}
}