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

Spring Boot,WebSocket不会向指定用户发送通知

查淮晨
2023-03-14

我在向指定用户发送通知时遇到此类问题。这是我的配置文件。

@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
    registry.addEndpoint("/ws")
            .withSockJS();
}

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

这是我的客户代码

$(document).ready(function () {
connect();

}

function connect() {
var socket = new SockJS('/ws');
stompClient = Stomp.over(socket);
stompClient.connect({}, function () {
    stompClient.subscribe("/user/queue/reply", function (notification) {
        console.log("------------------------ subscribed !!!!!!");
        notify(JSON.parse(notification.body).content);
    });
});

}

此控制器处理所有与聊天相关的处理程序方法

@MessageMapping("/message")
@SendToUser("/queue/reply")
public ChatMessage processMessageFromClient(@Payload ChatMessage chatMessage) throws Exception {
    return chatMessage;
}

伙计们,我似乎是SpringBootWebSocket领域的新手,请告诉我是否足以向指定用户发送通知。相反,当我执行上述客户机代码时,得到通知的是我,即用户主体,而不是所需的用户。我做错了什么?它说,spring boot将会话id隐藏起来,并使用它来决定由谁发送通知。但这里似乎不是这样。。。

单击通知发送按钮时,这是浏览器日志。

Opening Web Socket...
stomp.min.js:8 Web Socket Opened...
stomp.min.js:8 >>> CONNECT
accept-version:1.1,1.0
heart-beat:10000,10000
stomp.min.js:8 <<< CONNECTED
version:1.1
heart-beat:0,0
user-name:hmkhitaryan
stomp.min.js:8 connected to server undefined
stomp.min.js:8 >>> SUBSCRIBE
id:sub-0
destination:/user/queue/reply
stomp.min.js:8 >>> SEND
destination:/app/message
content-length:71
{"sender":"hmkhitaryan","content":"friend request","type":"FR_REQUEST"}
stomp.min.js:8 <<< MESSAGE
destination:/user/queue/reply
content-type:application/json;charset=UTF-8
subscription:sub-0
message-id:xgec4kaf-15
content-length:71
{"type":"FR_REQUEST","content":"friend request","sender":"hmkhitaryan"}

问题是,下一个用户不是发送“hmkhitaryan1”,而是发送给我“hmkhitaryan”。

共有1个答案

上官德寿
2023-03-14

您可以使用转换和发送来回复特定的用户。像这样-

@Controller
public class GreetingController {

@Autowired
private SimpMessageSendingOperations  template ;


@MessageMapping("/message")
public void greeting(@Payload String message, 
          Principal principal){

    template.convertAndSendToUser(<userName_youwant_tosend>,"/queue/queue1",message);
 }
}

在你的配置类中-

@Override
public void configureMessageBroker(MessageBrokerRegistry config) {
    config.enableSimpleBroker("/topic","/queue","/user");
    config.setApplicationDestinationPrefixes("/app");
    config.setUserDestinationPrefix("/user");
}

我和sendToUser也面临同样的问题。但这对我很有效。希望能有帮助。

 类似资料:
  • 我想向特定客户发送通知。 e、 g用户名用户 控制器 客户端 角服务 角分量 我已经搜索了许多其他问题并尝试了,但没有一个对我有用,例如这里由Thanh Nguyen Van回答,这里 控制台 提前谢谢。

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

  • 我有一个Spring启动应用程序运行在heroku。我使用webSocket为特定用户向客户端和服务器发送消息。我使用Spring引导的SimpMessagingTemplate.convertAndSendToUser来发送和接收消息,当用户需要从服务器获取消息时,这种方法效果很好。我使用Heroku会话亲和力,这意味着即使我扩大了会话的数量,用户和webSocket仍然共享同一个会话。 当我需

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

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

  • 我正在阅读《Spring in Action4》一书,以使用WebSocket上的STOMP消息传递。 假设,如下所示: 然后客户端使用以下JavaScript代码订阅目标: 则该消息将发送到目的地,如下所示: 那么,两个目的地和看起来是不同的,消息怎么可能到达客户端呢?