13 votes

Envoi périodique d'un message au client via Spring Web-Socket

J'essaie d'établir une connexion entre le client et le serveur via Spring webSocket et je le fais à l'aide de ce lien . Je veux que le contrôleur envoie un "hello" au client toutes les 5 secondes et que le client l'ajoute à la boîte de vœux à chaque fois. Voici la classe du contrôleur :

@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");
    }

}

et voici la fonction Connect() dans 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);
        });
    });
}

Lorsque l'index.jsp se charge et que j'appuie sur le bouton de connexion, il n'affiche qu'une seule fois le message "hello". Comment puis-je faire en sorte que le client affiche le message "hello" toutes les 5 secondes ?

25voto

Andrei Balici Points 501

Veuillez vous référer à cette partie de la la documentation . La façon dont vous essayez d'envoyer un message est totalement erronée. Je modifierais votre classe comme suit :

@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");
    }

}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X