Provo a utilizzare Spring con websocket. Ho iniziato le mie indagini con this tutorial.Come inviare un messaggio al client tramite websocket utilizzando Spring
Nel mio lato client ho qualcosa di simile per inizializzare la connessione al server:
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);
});
});
}
E le grandi opere, nel mio controller sono in grado di fare il mio processo nella seguente classe:
@Controller
@RequestMapping("/")
public class PhotoController {
@MessageMapping("/form")
@SendTo("/topic/greetings")
public Greeting validate(AddPhotosForm addPhotosForm) {
return new Greeting("Hello world !");
}
}
Ora quello che voglio fare è avere una discussione che invia un messaggio al client che ascolta "/ topic/greeting". Ho scritto la mia classe Runnable come questo:
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();
}
}
}
}
e completato il mio controller del genere:
@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");
}
}
Il metodo PhotoController.fireGreeting si chiama come voglio, ma non è successo niente sul lato client. Qualche suggerimento? Grazie.
Si prega di leggere [21.4.5 Invio di messaggi] (http://docs.spring.io/spring/docs/current/spring-framework-reference/html/ websocket.html # websocket-stomp-handle-send) dell'esercitazione Websocket di Spring. Questo non è certamente il modo in cui lo fai. Prendi in considerazione anche la lettura di Spring [meccanismo di pianificazione] (http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/scheduling/annotation/EnableScheduling.html) piuttosto che utilizzare thread non elaborati (non correttamente) . –
Grazie per il link, è esattamente quello che voglio fare. Riguardo il thread che uso, evidentemente non lo userò nello stato finale della mia applicazione. Ho una lunga procedura sul lato server che invierà informazioni al client per fargli sapere quali passi sono già stati fatti. – cheb1k4