我一直在尝试按照官方 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;
}
}
socket.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函数,并且我会得到一个控制台日志,表明消息已发送,但是我从未在订阅函数中得到回复。客户端成功连接到 WebSocket 服务器,我在控制台中得到了输出。我做错了什么?
最佳答案
将/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;
}
}
关于javascript - Spring WebSockets Stomp.subscribe 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45652438/