我使用经典的Spring5 WebSocket API编写WebSocket应用程序,即不使用SockJS和STOMP。我在获取所有活动的http会话时遇到了问题。我可以获取一个当前会话,但如何获取所有活动会话?如果我要使用一个经典的Java API(JSR356),我会使用一个方法: session.getOpenSessions()来获取所有打开的会话。但是我在Spring5的WebSocket API中找不到任何类似的方法。如何获取所有活动会话?
//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端点:
// 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);
}
}发布于 2019-01-18 21:25:42
SimpUserRegistry (DefaultSimpUserRegistry)跟踪已连接的websocket用户。
getUsers()方法返回所有已连接的用户及其会话。
下面是一个示例代码:
@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());
}
}https://stackoverflow.com/questions/51992610
复制相似问题