我正在研究 WebSocket 聊天。我做了一个简单的,可以将每条消息发送给每个人。但我正在尝试制作类似私有(private)消息的东西,但我真的不知道该怎么做。我尝试了不同的选择,但我不明白如何让它发挥作用。
这是我的代码:
WebSocketConfig.java
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {
@Override
public void configureMessageBroker(MessageBrokerRegistry config) {
config.enableSimpleBroker("/topic/", "/queue/", "/user/");
config.setApplicationDestinationPrefixes("/app");
}
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/gs-guide-websocket").withSockJS();
}
}
GreetingController.java
@Controller
public class GreetingController {
@MessageMapping("/hello")
@SendTo("/topic/greetings")
public Greeting greeting(Message message) throws Exception {
return new Greeting(message.getFrom_user_id(), message.getMessage(), message.getTo_user_id());
}
}
还有我的 js 函数来连接和发送消息:
function connect() {
var socket = new SockJS('/gs-guide-websocket');
stompClient = Stomp.over(socket);
var theUserId = 1;
stompClient.connect({user:theUserId}, function (frame) {
setConnected(true);
console.log('Connected: ' + frame);
//stompClient.subscribe('/topic/greetings', function (greeting) {
stompClient.subscribe('/topic/greetings', function (greeting) {
showGreeting(JSON.parse(greeting.body).content);
});
});
}
function sendName() {
stompClient.send("/app/hello", {}, JSON.stringify(
{
'from_user_id': parseInt($("#from_user_id").val()),
'message': $("#message").val(),
'to_user_id': parseInt($("#to_user_id").val())
}));
}
如何让私信生效?有人可以向我解释它应该如何工作吗?
干杯安德鲁!
最佳答案
我们可以利用SimpMessagingTemplate将消息发送到适当的目标队列
@Autowired
private SimpMessagingTemplate template;
@MessageMapping("/hello")
public void greeting(Message message) throws Exception {
this.template.convertAndSend("/topic/"+message.getFrom_user_id(),message);
}
据此在客户端定义订阅主题
关于java - Websocket 上的 Spring STOMP - "private"消息传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45729201/