我正在尝试在我的应用程序中使用 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();
}
}
感谢您的建议。
最佳答案
@SendTo
只在SimpAnnotationMethodMessageHandler
中起作用,只有通过SubProtocolWebSocketHandler
发起,hance当WebSocketMessage
从客户那里收到。
要实现您的要求,您应该注入(inject)您的@Scheduled
服务SimpMessagingTemplate brokerMessagingTemplate
并直接使用它:
@Autowired
private SimpMessagingTemplate brokerMessagingTemplate;
.......
this.brokerMessagingTemplate.convertAndSend("/topic/greetings", "foo");
关于java - Spring,如何使用 websockets 向连接的客户端广播消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26465135/