powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Ajax push и session timeout
18 сообщений из 18, страница 1 из 1
Ajax push и session timeout
    #38118165
rabiter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго дня, коллеги.

Подскажите плиз как быть в следующей ситуации. Мне надо было реализовать что-то вроде Comet - клиент должен совершить определенное действие по событию на сервере (т.е. как бы сервер инициатор действия а не клиент). Попробовал ICEFaces ajax push: клиент открывает соединение, оно какое-то время висит открытым, потом открывается следующее и так далее (long polling). Но что-то они какие-то глючные. То работает то нет. Я на все плюнул, и решил старым дедовским способом просто пинговать сервер из клиента аяксом по таймеру. Что-то вроде Comet все равно получается, да? Работает прекрасно. Раз в 30 секунд пинг, меня устраивает. Просто, надежно.
Но возникла проблема с таймаутом сессии. Ведь идея в том, что весь этот механизм что я реализовал не должен обновлять сессию. А так получается что из-за того, что у меня клиент каждые 30 секунд дергает сервлет, сессия никогда не умрет. Как быть, господа?

Вот, как обычно бывает, второй раз уже за сегодня - пока писал, пришла мысль в голову.
В сессии создать какой-нибудь атрибут типа: ACCESSED = время последнего доступа к сессии (не через аякс пушер)
Пропускать запросы через фильтр: если запрос пришел от аякс пушера (т.е. по таймеру), то этот атрибут ACCESSED не обновлять. А если это обычный запрос от клиента, то обновить ACCESSED. И причем еще и проверить, если ACCESSED слишком устарел - то значит от клиента запрос приходил давно (не считая ajax push запросов) - инвалидировать сессию.

PS: Только что узнал про новую фишку Servlet 3: javax.servlet.AsyncContext
Может есть смысл ее использовать в своем сервлете
...
Рейтинг: 0 / 0
Ajax push и session timeout
    #38118201
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rabiterНо что-то они какие-то глючные. То работает то нет.

Ну, стоило попробовать разобраться.

rabiterЯ на все плюнул, и решил старым дедовским способом просто пинговать сервер из клиента аяксом по таймеру. Что-то вроде Comet все равно получается, да?

Нет, это просто polling - очевидное решение в рамках HTTP. Long polling, он же Comet, это альтернатива, которая позволяет обойти недостатки polling.

rabiterНо возникла проблема с таймаутом сессии. Ведь идея в том, что весь этот механизм что я реализовал не должен обновлять сессию. А так получается что из-за того, что у меня клиент каждые 30 секунд дергает сервлет, сессия никогда не умрет. Как быть, господа?

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


rabiterВ сессии создать какой-нибудь атрибут типа: ACCESSED = время последнего доступа к сессии (не через аякс пушер)
Пропускать запросы через фильтр: если запрос пришел от аякс пушера (т.е. по таймеру), то этот атрибут ACCESSED не обновлять. А если это обычный запрос от клиента, то обновить ACCESSED. И причем еще и проверить, если ACCESSED слишком устарел - то значит от клиента запрос приходил давно (не считая ajax push запросов) - инвалидировать сессию.

Да, что-то типа такого. Это простейшее решение и рабочее. Значит лучшее по Оккаму.

rabiterPS: Только что узнал про новую фишку Servlet 3: javax.servlet.AsyncContext
Может есть смысл ее использовать в своем сервлете
А у вас сервер уже реализует Servlet 3? Стоит определится, нужен ли JSF контекст или нет.
...
Рейтинг: 0 / 0
Ajax push и session timeout
    #38118223
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rabiter,
и в терминологии немного плаваете
Server push - это то что требуется реализовать - нотификацию от сервера - клиенту
Polling - переодический опрос сервера
Long polling - долгий запрос к серверу, чтобы предоставить серверу канал для push
Comet - шуточное, но прижившееся, имя для Long polling (Ajax и Comet - чистящие средства)
...
Рейтинг: 0 / 0
Ajax push и session timeout
    #38118244
rabiter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

авторНу, стоило попробовать разобраться.
Пробовал. Несколько дней разочарования. Живет свое собственной жизнью - такое чувство что сырой функционал выложили в релиз. Хотя с тех пор, как я пробовал уже новая версия вышла, но осадок уже остался, как говорится.

авторНет, это просто polling - очевидное решение в рамках HTTP. Long polling, он же Comet, это альтернатива, которая позволяет обойти недостатки polling.
Можно спросить, а в чем недостатки простого polling? Только в том, что слишком часто идут запросы, со всем вытекающим из этого?

авторДа, что-то типа такого. Это простейшее решение и рабочее. Значит лучшее по Оккаму.

:-)

авторА у вас сервер уже реализует Servlet 3? Стоит определится, нужен ли JSF контекст или нет.

Да, Servlet 3, это же JavaEE 6, у нас последний гласфиш. С помощью AsyncContext можно реализовать Long polling.

Спасибо за ответ!
...
Рейтинг: 0 / 0
Ajax push и session timeout
    #38118262
rabiter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowiczrabiter,
и в терминологии немного плаваете
Server push - это то что требуется реализовать - нотификацию от сервера - клиенту
Polling - переодический опрос сервера
Long polling - долгий запрос к серверу, чтобы предоставить серверу канал для push
Comet - шуточное, но прижившееся, имя для Long polling (Ajax и Comet - чистящие средства)

Ясно, спасибо за информацию. Я не знал что Ajax это чистящее средство))
Думаю, что термин Ajax Push тоже имеет право на существование. Ведь Server Push можно и без аякса реализовать, а обычным запросом во фрейме. Ajax Push в этом случае больше сужает понятие Server Push'а)
...
Рейтинг: 0 / 0
Ajax push и session timeout
    #38118305
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rabiter,
запрос по таймеру самое простое средство - его и бери.
Время сессии измени \ обнули \ кончи через API
...
Рейтинг: 0 / 0
Ajax push и session timeout
    #38118308
rabiter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,

Yep, спасибо за ответ.
...
Рейтинг: 0 / 0
Ajax push и session timeout
    #38118316
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rabiterМожно спросить, а в чем недостатки простого polling? Только в том, что слишком часто идут запросы, со всем вытекающим из этого?

Ну, конечно. Частые запросы - лишняя нагрузка на сервер.
Редкие запросы - большая задержка между событием на сервере и получением его на клиенте.
Ещё вот в соседней теме была задача log писать с сервера на клиент. Тут проблема в том что при polling это лог нужно где-то накапливать, чистить и синхронизировать запись\чтение. Для подобной задачи Comet намного лучше. Но если нужна просто небольшая нотификация, то polling - OK.

rabiterДа, Servlet 3, это же JavaEE 6, у нас последний гласфиш. С помощью AsyncContext можно реализовать Long polling.

И у вас гласфиш, что же это за мода такая пошла... Тоже заказчик настоял?
...
Рейтинг: 0 / 0
Ajax push и session timeout
    #38118320
IDVsbruck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rabiterВот, как обычно бывает, второй раз уже за сегодня - пока писал, пришла мысль в голову.
В сессии создать какой-нибудь атрибут типа: ACCESSED = время последнего доступа к сессии (не через аякс пушер)
Пропускать запросы через фильтр: если запрос пришел от аякс пушера (т.е. по таймеру), то этот атрибут ACCESSED не обновлять. А если это обычный запрос от клиента, то обновить ACCESSED. И причем еще и проверить, если ACCESSED слишком устарел - то значит от клиента запрос приходил давно (не считая ajax push запросов) - инвалидировать сессию.
У меня ситуация была как раз наоборот - мне надо было, чтобы сессия не падала при клиенте с поллингом ...
Идея неплоха, я не подскажу КАК ее реализовать, но смогу подсказать ГДЕ найти решение. Есть продукт GraniteDS, позволяющий реализовать с помощью своего инструмента Gravity устойчивый ServerPush. Так вот, в его настройках присутствуют параметры с таймаутом для сессии. Я так понимаю, что раз параметр прописывается и он по истечении этого времени "роняет" сессию, то как-то этот механизм у него реализован. Так как это продукт с открытым кодом (на сайте можно найти все исходники), то моэно и подсмотреть, чего они там и как дергают.
...
Рейтинг: 0 / 0
Ajax push и session timeout
    #38118332
rabiter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторИ у вас гласфиш, что же это за мода такая пошла... Тоже заказчик настоял?

:D ну а что такого? Вполне так сервер, все лучше чем веб сфера 6-я, а ведь и с ней приходится на некоторых проектах работать))
...
Рейтинг: 0 / 0
Ajax push и session timeout
    #38118336
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rabiter:D ну а что такого?

Глючное оно.

rabiterВполне так сервер, все лучше чем веб сфера 6-я, а ведь и с ней приходится на некоторых проектах работать))
[/quot]
И почему не JBoss?
...
Рейтинг: 0 / 0
Ajax push и session timeout
    #38118337
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну и самое "свежее", это слоган:
авторWebSockets — полноценный асинхронный веб
...
Рейтинг: 0 / 0
Ajax push и session timeout
    #38118350
rabiter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowiczrabiter:D ну а что такого?

Глючное оно.
Не особо замечал. Но и в дебри глассфиша правда не залезал.
авторИ почему не JBoss?
На нем тоже должен работать проект. Кстати, JBoss же тоже JavaEE6 уже давно наверное? Значит там тоже есть Servlet 3.
...
Рейтинг: 0 / 0
Ajax push и session timeout
    #38118354
rabiter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IDVsbruck,

Спасибо за наводку!
...
Рейтинг: 0 / 0
Ajax push и session timeout
    #38118357
rabiter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123ну и самое "свежее", это слоган:
авторWebSockets — полноценный асинхронный веб

Хмм, а это интересно. Жалко только что, как я понял, IE поддерживает Web Sockets только начиная с 10 версии.
...
Рейтинг: 0 / 0
Ajax push и session timeout
    #38118364
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rabiterХмм, а это интересно.
Жалко только что, как я понял, IE поддерживает Web Sockets только начиная с 10 версии.
http://jfarcand.wordpress.com/2012/04/19/websockets-or-comet-or-both-whats-supported-in-the-java-ee-land/
...
Рейтинг: 0 / 0
Ajax push и session timeout
    #38118371
rabiter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

Спасибо за статью. Это абсолютно новая темя для меня.
...
Рейтинг: 0 / 0
Ajax push и session timeout
    #38118377
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rabiterначиная с 10 версии
каждый сам решает, какой у него проект - крутой, простой или "сферический конь в вакууме для обучения себя любимого". ))
______________________________________________
"Сложнее всего в мире достигнуть простоты — это крайняя граница опыта и последнее усилие гения". © George Sand.
AutoPOI.ru — ГИС-технологии для Oracle
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Ajax push и session timeout
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]