【问题标题】:Spring, how to broadcast message to connected clients using websockets?Spring,如何使用 websockets 向连接的客户端广播消息?
【发布时间】:2014-12-15 09:43:16
【问题描述】:

我正在尝试在我的应用程序中使用 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(); 
    }
}

谢谢你的建议。

【问题讨论】:

    标签: java spring stomp


    【解决方案1】:

    @SendTo 仅在SimpAnnotationMethodMessageHandler 中起作用,它仅通过SubProtocolWebSocketHandler 启动,例如当从客户端收到WebSocketMessage 时。

    为了满足您的要求,您应该注入您的@Scheduled 服务SimpMessagingTemplate brokerMessagingTemplate 并直接使用它:

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

    【讨论】:

    • 您能详细说明一下吗?如何注射?
    • 请在我的回答中查看@Autowired附近的编辑。
    猜你喜欢
    • 2016-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-14
    • 2019-09-20
    • 2019-01-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多