首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Spring5 WebSocket应用程序接口中获取所有活动会话?

如何在Spring5 WebSocket应用程序接口中获取所有活动会话?
EN

Stack Overflow用户
提问于 2018-08-24 02:59:12
回答 1查看 5.4K关注 0票数 4

我使用经典的Spring5 WebSocket API编写WebSocket应用程序,即不使用SockJS和STOMP。我在获取所有活动的http会话时遇到了问题。我可以获取一个当前会话,但如何获取所有活动会话?如果我要使用一个经典的Java API(JSR356),我会使用一个方法: session.getOpenSessions()来获取所有打开的会话。但是我在Spring5的WebSocket API中找不到任何类似的方法。如何获取所有活动会话?

代码语言:javascript
复制
//Configuration of WebSocket.

@Configuration
@EnableWebSocket
public class WebSocketConfig implements 
WebSocketConfigurer {

@Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
  //Map endpoint URL to handler's method.
  //Add interceptor of HTTP-handshake to copy HTTP-session's attributes to WebSocket-session's attributes.
  registry.addHandler(getWsEndpoint(), "/endpoint").addInterceptors(new HttpSessionHandshakeInterceptor());
}

@Bean
public WebSocketHandler getWsEndpoint() {
    return new WsEndpoint();
}
}

我的WebSocket端点:

代码语言:javascript
复制
// WebSocket endpoint class. 

public class WsEndpoint extends TextWebSocketHandler {

 public WsEndpoint(){}

 public WebSocketMessage<String> wsMsg;                      

  // This method will be called after successful websocket connection.
  @Override
  public void afterConnectionEstablished(WebSocketSession session)                                     
   throws java.lang.Exception {

     wsMsg = new TextMessage(new String("Connection ok!"));        
   session.sendMessage(wsMsg);  
  }

    // This method is called if message was recieved. 
    @Override
    public void handleTextMessage(WebSocketSession session, TextMessage message) throws IOException {       

     wsMsg = new TextMessage(new String("Message recieved!")); 
     session.sendMessage(wsMsg);
    }
}
EN

回答 1

Stack Overflow用户

发布于 2019-01-18 21:25:42

SimpUserRegistry (DefaultSimpUserRegistry)跟踪已连接的websocket用户。

getUsers()方法返回所有已连接的用户及其会话。

下面是一个示例代码:

代码语言:javascript
复制
@RestController
public class WebSocketController {

    private final SimpUserRegistry simpUserRegistry;

    public WebSocketController(SimpUserRegistry simpUserRegistry) {
        this.simpUserRegistry = simpUserRegistry;
    }

    @GetMapping("/ws/users")
    public List<String> connectedEquipments() {
        return this.simpUserRegistry
                .getUsers()
                .stream()
                .map(SimpUser::getName)
                .collect(Collectors.toList());
    }
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51992610

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档