Comment envoyer un message au client via websocket en utilisant Spring

J'essaie d'utiliser le Printemps avec websocket. J'ai commencé mon enquête ce tutoriel.

La dans mon côté client, j'ai quelque chose comme ça pour initialiser la connexion au serveur :

function connect() {
    var socket = new SockJS('/myphotos/form');
    stompClient = Stomp.over(socket);
    stompClient.connect({}, function(frame) {
        setConnected(true);
        console.log('Connected: ' + frame);
        stompClient.subscribe('/topic/greetings', function(greeting){
            showGreeting(JSON.parse(greeting.body).content);
        });
    });
}

Il fonctionne très bien, dans mon contrôleur, je suis capable de faire mon processus dans la classe suivante :

@Controller
@RequestMapping("/")
public class PhotoController {

    @MessageMapping("/form")
    @SendTo("/topic/greetings")
    public Greeting validate(AddPhotosForm addPhotosForm) {
        return new Greeting("Hello world !");
    }
}

Maintenant ce que je veux faire c'est d'avoir un thread d'envoi d'un message au client à l'écoute sur le “/topic/message d'accueil. J'ai écrit ma classe Runnable comme ceci :

public class FireGreeting implements Runnable {

    private PhotoController listener;

    public FireGreeting(PhotoController listener) {
        this.listener = listener;
    }

    @Override
    public void run() {
        while (true) {
            try {
                Thread.sleep( 2000 );
                listener.fireGreeting();
            } catch ( InterruptedException e ) {
                e.printStackTrace();
            }
        }   
    }
}

Et terminé mon contrôleur comme ça :

@Controller
@RequestMapping("/")
public class PhotoController {

    @MessageMapping("/form")
    @SendTo("/topic/greetings")
    public Greeting validate(AddPhotosForm addPhotosForm) {

        //added this part
        FireGreeting r = new FireGreeting( this );
        new Thread(r).start();

        return new Greeting("Hello world !");
    }

    //added this method
    @SendTo("/topic/greetings")
    public Greeting fireGreeting() {
        System.out.println("Fire");
        return new Greeting("Fire");
    }
}

La méthode PhotoController.fireGreeting s'appelle comme je veux, mais rien ne s'est passé sur le côté client.
Toutes les suggestions ? Merci.

source d'informationauteur cheb1k4