有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我正在尝试在我的应用程序中使用WebSocket。我遵循了本教程: 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) 个答案

  1. # 1 楼答案

    @SendTo仅在SimpAnnotationMethodMessageHandler中工作,当从客户端接收到WebSocketMessage时,它仅通过SubProtocolWebSocketHandler启动

    要实现您的需求,您应该将@Scheduled服务SimpMessagingTemplate brokerMessagingTemplate注入到您的@Scheduled服务中,并直接使用它:

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