2014-10-20 15 views
6

Próbuję użyć websockets w mojej aplikacji. Skorzystałem z tego samouczka: http://spring.io/guides/gs/messaging-stomp-websocket/Wiosna, jak przekazać wiadomość do podłączonych klientów za pomocą websockets?

Działa doskonale.

Gdy jeden z klientów powiązanych nacisnąć przycisk, metoda ta nazywa się:

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

i wiadomość jest transmitowana do wszystkich podłączonych klientów.

Teraz chcę zmodyfikować moją aplikację serwerową, aby wysyłała wiadomości okresowo (co godzinę) do wszystkich podłączonych klientów, bez interakcji z klientami.

Coś jak to (ale to nie działa oczywiście):

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

Thx za porady.

Odpowiedz

9

@SendTo działa tylko w SimpAnnotationMethodMessageHandler, który jest inicjowany tylko przez SubProtocolWebSocketHandler, hance, gdy WebSocketMessage jest odbierany od klientów.

Aby osiągnąć swoje wymagania należy wstrzyknąć do Państwa dyspozycji SimpMessagingTemplate brokerMessagingTemplate@Scheduled i używać go bezpośrednio:

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

Czy należy opracować na ten temat? jak wstrzyknąć? –

+0

Proszę zobaczyć zmianę w mojej odpowiedzi na temat '@ Autowired'. –

Powiązane problemy