Как пройти все сеансы в Ваадине

Я хочу знать, сколько пользователей подключено к моему приложению в режиме реального времени. У меня возникла идея зацикливаться на количестве открытых сессий, но я не могу найти, как это сделать. Если у вас есть другой способ сделать это, ваши предложения приветствуются.

2 ответа

Решение

Лучшее решение, которое я нашел до сих пор, - это подсчет сессий, когда они создаются и уничтожаются.

public class VaadinSessionListener{

    private static volatile int activeSessions = 0;

    public static class VaadinSessionInitListener implements SessionInitListener{

        @Override
        public void sessionInit(SessionInitEvent event) throws ServiceException {

            incSessionCounter();            
        }
    }

    public static class VaadinSessionDestroyListener implements SessionDestroyListener{

        @Override
        public void sessionDestroy(SessionDestroyEvent event) {

            /*
             * check if HTTP Session is closing
             */
            if(event.getSession() != null && event.getSession().getSession() != null){

                decSessionCounter();
            }
        }
    }


    public static Integer getActiveSessions() {
        return activeSessions;
    }

    private synchronized static void decSessionCounter(){
        if(activeSessions > 0){
            activeSessions--;
        }
    }

    private synchronized static void incSessionCounter(){
        activeSessions++;
    }
}

затем добавьте SessionListeners в метод init VaadinServlet

@WebServlet(urlPatterns = "/*", asyncSupported = true)
@VaadinServletConfiguration(productionMode = true, ui = MyUI.class)
public static class Servlet extends VaadinServlet {

    @Override
    public void init(ServletConfig servletConfig) throws ServletException {

        super.init(servletConfig);


        /*
         * Vaadin SessionListener
         */
        getService().addSessionInitListener(new VaadinSessionListener.VaadinSessionInitListener());
        getService().addSessionDestroyListener(new VaadinSessionListener.VaadinSessionDestroyListener());    
    }
}

[Отвод]

Здесь нет ответа. Я ошибочно думал, что цитируемый метод отвечает на вопрос, но это не так. Считайте это отречением; вместо того, чтобы удалить этот ответ, я оставлю его, чтобы другие не допустили мою ошибку.


VaadinSession.getAllSessions()

С Vaadin 7.2 пришло добавление статического метода, VaadinSession.getAllSessions, Историю смотрите в Билете № 13053.

Этот метод возвращает Collection из VaadinSession объекты, прикрепленные к одному HttpSession,

Этот метод сообщает вам, сколько объектов VaadinSession запущено для HttpSession одного пользователя, но не сообщает, сколько всего пользователей на вашем сервере приложений Vaadin.

Другие вопросы по тегам