禁止在SimpMessagingTemplate中的convertAndSendToUser方法中广播

Sun*_*wal 8 spring-websocket

我正在使用Spring websocket实现.要向客户端发送消息,有两种方法:

1)使用@SendToUser注释
2)使用convertAndSendToUser方法SimpMessagingTemplate

@SendToUser获取一个布尔参数broadcast,如果设置为false,则将该消息发布到当前会话.有没有办法让我有这种行为SimpMessagingTemplate.

Art*_*lan 7

如果我们看一下SendToMethodReturnValueHandler源代码,我们会看到:

if (broadcast) {
    this.messagingTemplate.convertAndSendToUser(user, destination, returnValue);
}
else {
    this.messagingTemplate.convertAndSendToUser(user, destination, returnValue, createHeaders(sessionId));
}
Run Code Online (Sandbox Code Playgroud)

那么,你的用例只需使用那个重载convertAndSendToUser并提供一个Map`sessionId:

messagingTemplate.convertAndSendToUser(user, destination, payload, 
           Collections.singletonMap(SimpMessageHeaderAccessor.SESSION_ID_HEADER, sessionId))
Run Code Online (Sandbox Code Playgroud)