如何使用spring websocket向用户及其子用户显示数据

时间:2016-11-14 11:09:18

标签: spring spring-boot stomp spring-websocket sockjs

我想使用sockjs + stomp + spring-boot-websocket实现此功能,如图所示:

Actually i want to achieve this functionality using sockjs + stomp + spring-boot-websocket as mentioned in image

1 个答案:

答案 0 :(得分:0)

您有两种选择: 1.创建向用户发送消息的实用程序,在内部,您需要向3个用户(用户+子用户)发送消息并在控制器中使用此实用程序

  1. 创建每个用户和子用户将订阅的专用频道。如果您愿意,可以在订阅消息中添加安全性。
  2. 看下面:

    MyClassInterceptor  extends ChannelInterceptorAdapter {
    private static final Logger LOGGER = LogManager.getLogger(MyClassInterceptor .class);
    @Override
    public Message<?> preSend(Message<?> message, MessageChannel channel) {
    
    MessageHeaders headers = message.getHeaders();
    SimpMessageType type = (SimpMessageType) headers.get("simpMessageType");
    String simpSessionId = (String) headers.get("simpSessionId");
    
    if (type == SimpMessageType.CONNECT) {
        Principal principal = (Principal) headers.get("simpUser");
        LOGGER.debug("WsSession " + simpSessionId + " is connected for user " + principal.getName());
    } else if (type == SimpMessageType.DISCONNECT) {
        LOGGER.debug("WsSession " + simpSessionId + " is disconnected");
    }
    return message;
    }
    }
    

    就我个人而言,我认为选项1更简单,并且不需要您处理许多事情。

    你不能用spring来做,因为它根据用户名为每个用户创建了前缀,所以每个用户名都有特定的队列