Tôi đang sử dụng hướng dẫn this và tôi đang cố gắng tìm hiểu cách nhận số phiên hiện tại.Spring websocket - cách lấy số phiên
WebSocketConfig của tôi trông như thế này (sao chép và dán từ các hướng dẫn):
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {
@Override
public void configureMessageBroker(MessageBrokerRegistry config) {
config.enableSimpleBroker("/topic");
config.setApplicationDestinationPrefixes("/app");
}
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/gs-guide-websocket").withSockJS();
}
}
Tôi muốn biết số phiên bên trong của lớp này (một lần nữa sao chép và dán):
@Controller
public class GreetingController {
@MessageMapping("/hello")
@SendTo("/topic/greetings")
public Greeting greeting(HelloMessage message) throws Exception {
Thread.sleep(1000); // simulated delay
return new Greeting("Hello, " + message.getName() + "!");
}
}
Có cách nào dễ dàng để nhận số phiên hiện tại (người dùng, kết nối) vào websocket không?
Edit:
Đây là giải pháp của tôi:
Set<String> mySet = Collections.newSetFromMap(new ConcurrentHashMap<String, Boolean>());
@EventListener
private void onSessionConnectedEvent(SessionConnectedEvent event) {
StompHeaderAccessor sha = StompHeaderAccessor.wrap(event.getMessage());
mySet.add(sha.getSessionId());
}
@EventListener
private void onSessionDisconnectEvent(SessionDisconnectEvent event) {
StompHeaderAccessor sha = StompHeaderAccessor.wrap(event.getMessage());
mySet.remove(sha.getSessionId());
}
bây giờ tôi có thể nhận được số lượng Phiên với mySet.size()
.
Cảm ơn! Tôi đã chỉnh sửa bài đăng gốc của mình. –