Spring,如何使用websockets向连接的客户端广播消息?

时间:2014-10-20 11:57:39

标签: java spring stomp

我正在尝试在我的应用中使用websockets。我已经按照本教程:    http://spring.io/guides/gs/messaging-stomp-websocket/

效果很好。

当其中一个连接的客户端按下按钮时,会调用此方法:

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

并向所有连接的客户端广播消息。

现在我想修改我的服务器应用程序,它会定期(每小时)向所有连接的客户端广播消息,而无需客户端的交互。

这样的东西(但这显然不起作用):

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

表示建议。

1 个答案:

答案 0 :(得分:12)

@SendTo仅适用于SimpAnnotationMethodMessageHandlerSubProtocolWebSocketHandler只能通过WebSocketMessage启动,有时会从客户端收到@Scheduled

为了达到您的要求,您应该注入SimpMessagingTemplate brokerMessagingTemplate服务@Autowired private SimpMessagingTemplate brokerMessagingTemplate; ....... this.brokerMessagingTemplate.convertAndSend("/topic/greetings", "foo"); 并直接使用它:

{{1}}