当前位置: 首页 > 知识库问答 >
问题:

向spring boot websocket中的特定用户发送通知

龙玺
2023-03-14

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

e、 g用户名用户

@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");

        }

控制器

@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;

      })     });

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

控制台

 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

提前谢谢。

共有2个答案

上官正志
2023-03-14

似乎您的目的地缺少一条斜线:

template.convertAndSendToUser(principal.getName(), "/queue/notification", notifications); 
顾超
2023-03-14

gerrytan对在Spring Web套接字上向特定用户发送消息的回答提到了一个Web套接字配置更改,以注册/user前缀。在你的情况下我猜是替换的意思

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

具有

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

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

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

这是:

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

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

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

或者从标题中获取。但是马库斯在如何向具体用户发送网络插座消息?即使在这里,你也不需要用户名,所以它可能是这样工作的:

stompClient.subscribe('/user/queue/notification', ...)
 类似资料:
  • 我有聊天应用程序我正在使用Firebase firestore数据库,我正在保存最近的消息如下 接收者端:messages->recieverId->recent_messages 这意味着相同的消息将被写入当前用户和接收者用户文档。(同一消息将写入两个不同的文档) 消息内容如下: -接收方 现在我要观察集合,并且只向接收方用户发送通知,有什么方法可以避免向这两个用户发送推送通知吗?

  • 我是新手。NET(C#)和WebSocket。。。我已经安装了VS2012和Windows Server 2012,并且已经启动并运行了WebSocket。我似乎无法从一个套接字接收消息并将其发送到另一个特定的套接字。唯一的选择似乎是向所有套接字广播消息。有没有一种方法可以将消息只发送给特定的用户?我希望聊天室主持人有机会拒绝不适当的帖子。

  • 是否可以向webview Android应用程序的特定用户发送单独推送通知? 我有一个基于webview的Android应用程序。Android8会屏蔽所有后台进程,我的应用程序不能再每隔5分钟检查一次消息,如果有新消息,就会显示推送通知。据我所知,几乎唯一的解决方案是使用firebase显示通知。 我的问题是:我可以向webview应用程序用户发送单独的Firebase通知吗?如果是,如何?从A

  • 我使用本教程中描述的spring设置了一个WebSocket:https://spring.io/guides/gs/messaging-stomp-websocket/。我需要的是我的服务器每5秒向特定用户发出一条消息。所以我首先做了这个: 而且起作用了。现在,为了只向特定用户发送消息,我更改了以下内容: 在WebSocketConfig.java中添加队列: 更改GreetingControl

  • 假设我在MongoDB中有以下模式: 每个帖子必须有一个所有者,并且可能有许多贡献者(由所有者添加)。 当所有者或任何贡献者对post对象进行更改时,我需要将该更改实时通知给所有相关的用户(使用Socket。IO)。 但是我对如何做到这一点有一些疑问...我的意思是,我知道 Socket.IO 有一些方法可以向特定用户发出消息,但我们需要知道 SocketID。如何将用户 ID 与套接字 ID 相

  • 问题内容: 如何仅从服务器向特定用户发送websocket消息? 我的webapp具有spring安全设置,并使用websocket。我在尝试仅从服务器向特定用户发送消息时遇到棘手的问题。 通过阅读手册,我的理解是来自我们可以做的服务器 在客户端: 但是我永远无法调用订阅回调。我尝试了许多不同的方法,但是没有运气。 如果我将其发送到/ topic / reply,它可以工作,但所有其他已连接用户也