2016-09-24 10 views
5

this eğiticisini kullanıyorum ve şu anki oturumların sayısını nasıl alacağımı anlamaya çalışıyorum.Spring websocket - oturumların sayısını nasıl alabilirim

My WebSocketConfig (kopyalayıp öğreticisindeki yapıştır) şöyle görünür:

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

} 

ben (yine kopyalama ve yapıştırma) Bu sınıfın içindeki oturum sayısını bilmek istiyorum:

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

} 

Geçerli oturum sayısını (kullanıcılar, bağlantılar) web bağlantısına almak için kolay bir yol var mı?

Düzenleme:

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

Şimdi mySet.size() ile Oturum sayısını elde edebilirsiniz:

İşte benim çözümdür.

cevap

2

ApplicationContext olaylarını kullanabilirsiniz. Her bağlantı, abonelik veya diğer eylemler özel olayları tetikler. SessionConnectEvent, SessionConnectedEvent, SessionSubscribeEvent ve benzeri gibi.

Tam doc bu olaylardan biri ateş açılacak olduğunda, kendi mantığıyla, her şeyin üstesinden gelebilecek here

olduğunu.

+0

Teşekkürler! Orijinal gönderimi düzenledim. –