2016-09-24 17 views
5

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().

Trả lời

2

Bạn có thể sử dụng ApplicationContext sự kiện. Mọi kết nối, đăng ký hoặc các hành động khác sẽ kích hoạt các sự kiện đặc biệt. Chẳng hạn như SessionConnectEvent, SessionConnectedEvent, SessionSubscribeEvent và cứ tiếp tục như vậy.

Full doc là here

Khi một trong những sự kiện này sẽ bị sa thải, bạn có thể xử lý nó, với logic của riêng bạn.

+0

Cảm ơn! Tôi đã chỉnh sửa bài đăng gốc của mình. –

Các vấn đề liên quan