簡體   English   中英

在每個http請求上向客戶端發送stomp消息

[英]Sending stomp message to client on every http request

我有一個彈簧啟動服務器和一個客戶端,它們使用STOMP通過Websockets連接。

我的用例是每次向特定端點發出http請求時,我都希望將數據發送到客戶端。 我找到的所有教程,只顯示案例,客戶端將一些數據發送到“/ hello”,服務器通過向“topic / greetings”發送數據做出反應:

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

目標中缺少尾部斜杠

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

在此輸入圖像描述

GitHub的回購發出-54498776

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM