【问题标题】:Spring WebSockets Stomp.subscribe not workingSpring WebSockets Stomp.subscribe 不工作
【发布时间】:2018-01-20 23:44:02
【问题描述】:

我一直在尝试按照官方 Spring 指南实现一个基本的 Spring WebSockets 应用程序。我拥有的文件如下:

WebSocketConfig.java

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {

    @Override
    public void configureMessageBroker(MessageBrokerRegistry registry) {
        registry.enableSimpleBroker("/chat");
        registry.setApplicationDestinationPrefixes("/message");
    }

    @Override
    public void registerStompEndpoints(StompEndpointRegistry stompEndpointRegistry) {
        stompEndpointRegistry.addEndpoint("/ws-connect").setAllowedOrigins("*").withSockJS();
    }
}

MessageController.java

@Controller
public class MessageController {

    @MessageMapping(value = "/test")
    @SendTo("/private")
    public Message message(String messageText) {
        Message message = new Message();
        message.setMessage(messageText);r);
        message.setTimestamp(new Date());
        return message;
    }
}

sockets.js

var stompClient = null;

function connect() {
    var socket = new SockJS('http://localhost:8080/ws-connect');
    stompClient = Stomp.over(socket);
    stompClient.connect({}, function(frame) {
        console.log('Connected: ' + frame);
        stompClient.subscribe('/chat/private', function(message) {
            console.log('Here');
            console.log('Message is: ' + message);
        });
        console.log('Here2');
    })
}

connect();

function sendMessage() {
    stompClient.send('/message/test', {}, "Hello self!");;
}

我的 index.html 中有一个按钮,单击该按钮会调用 sendMessage 函数,我会得到一个控制台日志,表明消息已发送,但是我从未在 subscribe 函数中得到回复。客户端成功连接到 WebSocket 服务器,我在控制台中输出了这个。我做错了什么?

【问题讨论】:

    标签: javascript spring websocket stomp spring-websocket


    【解决方案1】:

    将 /private 更改为 /chat/private

    如下修改:

    @Controller
    public class MessageController {
    
        @MessageMapping(value = "/test")
        @SendTo("/chat/private")
        public Message message(String messageText) {
            Message message = new Message();
            message.setMessage(messageText);
            message.setTimestamp(new Date());
            return message;
        }
    }
    

    【讨论】:

    • 哦,我的错。我对已经使用目标前缀的 MessageMapping 感到困惑。
    猜你喜欢
    • 2014-12-16
    • 1970-01-01
    • 2022-12-14
    • 1970-01-01
    • 2011-05-22
    • 1970-01-01
    • 1970-01-01
    • 2021-12-04
    • 2019-06-15
    相关资源
    最近更新 更多