cometd bayeux: правильная обработка отключения пользователя при выгрузке страницы

Текущая настройка: сервлет cometD с подключаемым модулем jQuery cometd.

Допустим, у меня есть простой чат, к которому в настоящее время подключены 2 пользователя (userA и userB). Когда пользователь B уходит со страницы, мне нужно, чтобы пользователь A был уведомлен о том, что пользователь B покинул комнату. Есть ли способ сообщить пользователю A, что пользователь B ушел без использования обработчика unload?

$(window).unload(function(){
/** позволяет уведомить других пользователей о том, что currentUserId ушел **/

});

После проведения множества тестов; приведенный выше блок кода не является надежным.

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

Любые идеи? Должен ли я использовать метод опроса setInterval?


person ryan    schedule 12.10.2010    source источник
comment
Привет Райан. У меня та же проблема, и странно, что библиотека Cometd вообще ее не решает. Вы нашли ответ? это будет очень полезно для меня. Спасибо   -  person Yaron    schedule 13.02.2011
comment
Привет, Ярон, я только что добавил ответ на этот пост. Надеюсь, вы найдете это полезным!   -  person ryan    schedule 18.02.2011


Ответы (2)


Для этого кому интересно.

Вы можете зарегистрировать метод «removeListener», когда сервер завершает сеанс пользователя.

    client.addListener(new ServerSession.RemoveListener() {
        public void removed(ServerSession session, boolean timeout){
            members.values().remove(session.getId());
            broadcastMembers(members.keySet());
        }
    });

Пример полного кода: ChatService.java#handleMembership

person ryan    schedule 18.02.2011

Да, я знаю, что этот вопрос старый, но почему бы просто не использовать PresenceListener?

person Christian    schedule 25.10.2013