2014-10-20 11 views
6

Sto provando ad usare websockets nella mia app. Ho seguito questo tutorial: http://spring.io/guides/gs/messaging-stomp-websocket/Spring, come trasmettere messaggi ai client connessi tramite websocket?

Funziona perfettamente.

Quando uno di clienti collegati Premere il tasto, questo metodo viene chiamato:

@MessageMapping("/hello") 
@SendTo("/topic/greetings") 
public Greeting greeting() throws Exception { 
    System.out.println("Sending message..."); 
    Thread.sleep(1000); // simulated delay 
    return new Greeting("hello!");   
} 

e il messaggio viene trasmesso a tutti i client connessi.

Ora voglio modificare la mia app server, che trasmetterà messaggi periodicamente (ogni ora) a tutti i miei clienti connessi, senza interazione da parte dei client.

Qualcosa di simile (ma questo non sta funzionando, ovviamente):

@Scheduled(fixedRate = 3600000) 
public void sendMessage(){ 
    try { 
    @SendTo("/topic/greetings")  
    greeting(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

Thx per consigli.

risposta

9

@SendTo funziona solo nel SimpAnnotationMethodMessageHandler, che è iniziata solo attraverso il SubProtocolWebSocketHandler, Hance quando il WebSocketMessage viene ricevuto da parte dei clienti.

Per realizzare le vostre esigenze deve iniettare al vostro servizio di @ScheduledSimpMessagingTemplate brokerMessagingTemplate e usarlo direttamente:

@Autowired 
private SimpMessagingTemplate brokerMessagingTemplate; 
....... 
this.brokerMessagingTemplate.convertAndSend("/topic/greetings", "foo"); 
+0

Potete per favore elaborare su questo? come lo inietto? –

+0

Si prega di vedere una modifica nella mia risposta intorno a '@ Autowired'. –

Problemi correlati