2016-02-12 1 views
1

Я работаю над проектом веб-сокета JavaEE для установления соединения через веб-сокет с мобильным телефоном Android. В моем проекте мне нужно запомнить сеанс веб-сокета подключенного клиента на моей стороне сервера.Управление сеансом устаревших веб-сокетов в JavaEE

Если мобильный клиент вручную отключится, то его сеанс будет удален из моей карты сеанса, поэтому нет проблем, но если соединение с веб-сокетом отменяется, но отключается Wi-Fi, чем сервер не получает запрос на закрытие сокета, и, следовательно, будет старая сессия веб-сокета на моей карте сеансов. Мой вопрос: как узнать, активен ли сеанс на моей карте сеанса или нет в этом сценарии.

То, что я пробовал, заключается в том, что я пытаюсь выполнить ping-клиент с использованием объекта сеанса с моей карты сеанса, но он всегда отправляет мне сообщение понга, или нет, что клиент активен или нет. Помогите мне с хорошими предложениями.

+1

Если ваше мобильное приложение необходимо подключить, вы слушаете HttpSessionListener. через 30 минут (время ожидания httpsession), если от вашего клиента не происходит никаких действий, httpsession будет уничтожен. В это время вы можете удалить свой веб-узел из своего кеша. надеюсь, что это помогает –

ответ

0

Вы можете прослушивать сеанс уничтожения.

Предполагая, что у вас есть CDI @SessionScoped управляемый bean-компонент, используйте @PreDestroy.

@SessionScoped 
public class SocketManager implements Serializable { 

    // ... 

    @PreDestroy 
    public void sessionDestroyed() { 
     // Close web sockets here. 
    } 

} 

Или, если вы не имеете КДИ в руках, используйте HttpSessionListener#sessionDestroyed().

@WebListener 
public class SocketManager implements HttpSessionListener { 

    // ... 

    @Override 
    public void sessionDestroyed(HttpSessionEvent event) { 
     // Close web sockets here. 
    } 

} 

Таким образом, хранение несериализуемых сессий веб-сокетов в сеансе HTTP является плохой идеей. Скорее сохраните их в области приложения, с помощью некоторого уникального идентификатора, который вы, в свою очередь, ассоциируете с сеансом HTTP.

+0

Создается ли сеанс Http при подключении веб-сокета клиентом ???? –

+0

Нет, он не создается при запуске сеанса WS. Он создается только при запуске сеанса HTTP. Обычно, просто открывая страницу JSP/Facelets в первый раз во время сеанса клиента. – BalusC

Смежные вопросы