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

标签 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(); 
    }
}

感谢您的建议。

最佳答案

@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/

相关文章:

java - JFreeChart margin

java - 如何在 Iterable 上执行 Stream 函数?

java - 无法在 Spring Boot 1.4 中扩展 WebMvcAutoConfigurationAdapter

java - 如何在spring boot中测试文件上传?

java - Spring WebSocket MessageMapping 不起作用

java - 我被 spring.config、persistence.xml 和 pom 文件的不同组合所困扰

java - 正则表达式在每个字符串html中添加事件onclick

java - 使用 JPA 存储枚举值

rabbitmq - Dart 和 RabbitMQ 绑定(bind)交换

node.js - stomp.ack 产生错误 : Unexpected ACK received for message-id