Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Ajax push и session timeout / 18 сообщений из 18, страница 1 из 1
21.01.2013, 15:24:11
    #38118165
rabiter
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ajax push и session timeout
Доброго дня, коллеги.

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

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

PS: Только что узнал про новую фишку Servlet 3: javax.servlet.AsyncContext
Может есть смысл ее использовать в своем сервлете
...
Рейтинг: 0 / 0
21.01.2013, 15:39:21
    #38118201
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ajax push и session timeout
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
21.01.2013, 15:44:40
    #38118223
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ajax push и session timeout
rabiter,
и в терминологии немного плаваете
Server push - это то что требуется реализовать - нотификацию от сервера - клиенту
Polling - переодический опрос сервера
Long polling - долгий запрос к серверу, чтобы предоставить серверу канал для push
Comet - шуточное, но прижившееся, имя для Long polling (Ajax и Comet - чистящие средства)
...
Рейтинг: 0 / 0
21.01.2013, 15:54:41
    #38118244
rabiter
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ajax push и session timeout
Blazkowicz,

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

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

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

:-)

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

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

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

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

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

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

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

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

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

Глючное оно.

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

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

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

Хмм, а это интересно. Жалко только что, как я понял, IE поддерживает Web Sockets только начиная с 10 версии.
...
Рейтинг: 0 / 0
21.01.2013, 16:43:16
    #38118364
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ajax push и session timeout
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
21.01.2013, 16:46:45
    #38118371
rabiter
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ajax push и session timeout
Blazkowicz,

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


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