gpt4 book ai didi

session - 如何在 Spring 5 WebSocket API 中获取所有事件 session ?

转载 作者:行者123 更新时间:2023-12-03 23:15:23 25 4
gpt4 key购买 nike

我在经典 Spring 5 WebSocket API 的帮助下编写 WebSocket 应用程序,即不使用 SockJS 和 STOMP。
我在获取所有事件的 http session 时遇到问题。
我可以获得一个当前 session ,但如何获取所有事件 session ?
如果我使用经典的 Java API(JSR356),我会使用一个方法:session.getOpenSessions() 来获取所有打开的 session 。
但是我在 Spring 5 WebSocket API 中找不到类似这种方法的东西。
如何获取所有事件 session ?

//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);
}
}

最佳答案

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

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

这是一个示例代码:

@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());
}
}

关于session - 如何在 Spring 5 WebSocket API 中获取所有事件 session ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51992610/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com