gpt4 book ai didi

java - 在spring boot websocket中向特定用户发送通知

转载 作者:IT老高 更新时间:2023-10-28 13:57:03 27 4
gpt4 key购买 nike

我想向特定客户发送通知。

例如用户名用户

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfiguration extends
AbstractWebSocketMessageBrokerConfigurer {

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

@Override
public void configureMessageBroker(MessageBrokerRegistry registry) {
registry.enableSimpleBroker("/topic", "/queue");
registry.setApplicationDestinationPrefixes("/app");

}

Controller

@GetMapping("/notify")
public String getNotification(Principal principal) {
String username = "user";

notifications.increment();
logger.info("counter" + notifications.getCount() + "" + principal.getName());
// logger.info("usersend:"+sha.getUser().getName()) ; //user

template.convertAndSendToUser(principal.getName(), "queue/notification", notifications);

return "Notifications successfully sent to Angular !";
}

客户端

角度服务

connect() {
let socket = new SockJs(`api/socket`);

let stompClient = Stomp.over(socket);

return stompClient;
}

角度组件

 let stompClient = this.webSocketService.connect();

stompClient.connect({}, frame => {

stompClient.subscribe('/user/queue/notification', notifications => {
console.log('test'+notifications)
this.notifications = JSON.parse(notifications.body).count;

}) });

我已经搜索了许多其他问题并尝试过,但没有一个对我有用例如 here由 Thanh Nguyen Van 和 here 回答

控制台

 Opening Web Socket...
stomp.js:134 Web Socket Opened...
stomp.js:134 >>> CONNECT
accept-version:1.1,1.0
heart-beat:10000,10000


stomp.js:134 <<< CONNECTED
version:1.1
heart-beat:0,0


stomp.js:134 connected to server undefined
reminder.component.ts:18 test callsed
stomp.js:134 >>> SUBSCRIBE
id:sub-0
destination:/user/queue/notification

提前致谢。

最佳答案

gerrytan的答案|至Sending message to specific user on Spring Websocket提到了 Web 套接字配置更改,以注册 /user 前缀。在你的情况下,我猜这意味着替换

registry.enableSimpleBroker("/topic", "/queue");

registry.enableSimpleBroker("/topic", "/queue", "/user");

他还说在 Controller 中你不需要 /user 前缀,因为它是自动添加的。所以你可以试试这个:

template.convertAndSendToUser(principal.getName(), "/queue/notification", notifications);

还有这个:

template.convertAndSendToUser(principal.getName(), "/user/queue/notification", notifications);

在客户端,您需要提供用于连接服务器的用户名。你可以直接插入:

stompClient.subscribe('/user/naila/queue/notification', ...)

或从标题中获取。但是MarkusHow to send websocket message to concrete user? 上说即使在这里你也不需要用户名,所以它可能像这样工作:

stompClient.subscribe('/user/queue/notification', ...)

关于java - 在spring boot websocket中向特定用户发送通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49748468/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com