Java 通过SpringWebSocket定期向客户端发送消息

Java 通过SpringWebSocket定期向客户端发送消息,java,spring,spring-boot,websocket,sockjs,Java,Spring,Spring Boot,Websocket,Sockjs,我正试图通过SpringWebSocket在客户机和服务器之间建立连接,这是在SpringWebSocket的帮助下实现的。 我希望控制器每5秒向客户端发送一个“hello”,客户端每次都将其附加到问候框中。 这是控制器类: @EnableScheduling @Controller public class GreetingController { @Scheduled(fixedRate = 5000) @MessageMapping("/hello") @Send

我正试图通过SpringWebSocket在客户机和服务器之间建立连接,这是在SpringWebSocket的帮助下实现的。 我希望控制器每5秒向客户端发送一个“hello”,客户端每次都将其附加到问候框中。 这是控制器类:

@EnableScheduling
@Controller
public class GreetingController {

    @Scheduled(fixedRate = 5000)
    @MessageMapping("/hello")
    @SendTo("/topic/greetings")
    public Greeting greeting() throws Exception {
        Thread.sleep(1000); // simulated delay
        System.out.println("scheduled");
        return new Greeting("Hello");
    }

}
这是app.jsp中的Connect()函数:

function connect() {
    var socket = new SockJS('/gs-guide-websocket');
    stompClient = Stomp.over(socket);
    stompClient.connect({}, function (frame) {
        setConnected(true);
        console.log('Connected: ' + frame);
        stompClient.send("/app/hello", {}, JSON.stringify({'name': "connect"}));
        stompClient.subscribe('/topic/greetings', function (message) {
            console.log("message"+message);
             console.log("message"+(JSON.parse(message.body)));

            showGreeting(JSON.parse(message.body).content);
        });
    });
}

当index.jsp加载并且我按下connect按钮时,只有一次它在问候语中应用hello,我应该如何使客户端每5秒显示一次“hello”消息?

请参阅本部分。 你试图发送信息的方式是完全错误的。 我将对您的上述课程进行如下修改:

@EnableScheduling
@Controller
public class GreetingController {

    @Autowired
    private SimpMessagingTemplate template;

    @Scheduled(fixedRate = 5000)
    public void greeting() {
        Thread.sleep(1000); // simulated delay
        System.out.println("scheduled");
        this.template.convertAndSend("/topic/greetings", "Hello");
    }

}

“已计划”消息是否可见?我的意思是,计划注释正在工作?我认为问题是,你试图做的没有意义,我的意思是,当有人向特定主题发送消息时,你需要将消息映射作为调度器考虑,然后向所有听众广播,但添加计划实际上没有人发送真正的消息。我建议你用setTimeout()JS函数从一些伪html中删除预定的注释,然后连接到主题并发送一些消息,然后你会在另一个html页面中看到消息。他使用的方式是正确的,请使用@SendTo检查此文档,该方法仅在作为消息处理程序调用该方法时(即消息来自websocket本身时)才会将消息发布到该主题。如果希望容器每5秒调用一次该方法并将消息发布到主题,则必须使用消息传递模板。没有办法。啊,很抱歉,我没有看到你删除一些注释,是的,我认为这个方法也可以工作。使用这个方法订阅特定的信息,例如,
“/topic/greetings/{id}
”?有关更多详细信息,请参见我的问题: