Ich versuche, Feder mit Websocket zu verwenden. Ich begann meine Untersuchung mit this tutorial.So senden Sie eine Nachricht an den Client über Websocket mit Spring
In meiner Seite Client Ich habe so etwas wie, dass die Verbindung zum Server zu initialisieren:
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);
});
});
}
Es funktioniert gut, in meinem Controller der Lage bin, ich meinen Prozess in der folgenden Klasse zu tun:
Jetzt was ich tun möchte, ist es ein Thread senden eine Nachricht an den Client hören auf "/ Thema/Gruß". Ich schrieb meine Runnable Klasse wie folgt:
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();
}
}
}
}
Und fertig mein Controller wie folgt aus:
@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");
}
}
Verfahren PhotoController.fireGreeting genannt wird, wie ich will, aber es ist nichts passiert auf der Client-Seite. Irgendwelche Vorschläge? Vielen Dank.
Bitte lesen Sie [21.4.5 Senden von Nachrichten] (http://docs.spring.io/spring/docs/current/spring-framework-reference/html/ websocket.html # websocket-stomp-handle-send) aus dem Spring Websocket-Tutorial. Dies ist sicherlich nicht wie Sie es tun. Lesen Sie auch über Spring [Scheduling-Mechanismus] (http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/scheduling/annotation/EnableScheduling.html) anstatt rohe Threads (nicht korrekt) zu lesen. . –
Vielen Dank für den Link, es ist genau das, was ich tun möchte. Über den Thread, den ich benutze, benutze ich ihn natürlich nicht im Endzustand meiner Anwendung. Ich habe einen langen Prozess in der Server-Seite, die Informationen an den Client sendet, um ihn wissen zu lassen, welche Schritte bereits erledigt sind. – cheb1k4