发送跺脚消息客户端上的每个HTTP请求

问题描述 投票:3回答:1

我有一个弹簧引导服务器和其使用STOMP通过的WebSockets连接的客户机。

我使用的情况是,我想将数据发送到客户端,每一个HTTP请求到特定端点是由时间。所有我发现教程,只显示的情况下,客户端的一些数据发送到“/你好”和服务器发送数据“主题/问候”反应:

@MessageMapping("/hello")
@SendTo("/topic/greetings")
public Greeting greeting(HelloMessage message) throws Exception {
    Thread.sleep(1000); // simulated delay
    return new Greeting("Hello, " + HtmlUtils.htmlEscape(message.getName()) + "!");
}

我所需要的是,而不需要该消息映射的发送数据的控制器方法。它应该只是将数据发送到客户端每次有人进行一个GET请求到端点。我尝试以下,但它没有工作:

@Autowired
private SimpMessagingTemplate msgTemplate;

@SendTo("topic/data-received")
@RequestMapping(value = "/send-data", method = RequestMethod.POST)
public String sendData(@RequestHeader(value = "id") String id,
                               @RequestHeader(value = "data") String data) {

    User user = new User();
    user.id = UUID.fromString(id);
    user.stringData = data;
    database.saveStringData(user);
    msgTemplate.convertAndSend("topic/data-received", "data sent!!");
    return "successful";
}

这里是我的客户端代码:

function connect() {
var socket = new SockJS('/clipboard-websocket');
var stompClient = Stomp.over(socket);
stompClient.connect({}, function (frame) {
    console.log('Connected: ' + frame);
    stompClient.subscribe('topic/data-received/', function (message) {
        alert("Data received!!");
    });
}

这就是我的WebSocket的配置:

@Override
public void configureMessageBroker(MessageBrokerRegistry config) {
    config.enableSimpleBroker("/topic");
    config.setApplicationDestinationPrefixes("/app");
}

@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
    registry.addEndpoint("/clipboard-websocket").withSockJS();
}
java spring spring-boot websocket stomp
1个回答
1
投票

尾部的斜杠中缺少目标

msgTemplate.convertAndSend("/topic/data-received", "data sent!!");

enter image description here

github-repo-issue-54498776

© www.soinside.com 2019 - 2024. All rights reserved.