|
|
|
Ajax push и session timeout
|
|||
|---|---|---|---|
|
#18+
Доброго дня, коллеги. Подскажите плиз как быть в следующей ситуации. Мне надо было реализовать что-то вроде Comet - клиент должен совершить определенное действие по событию на сервере (т.е. как бы сервер инициатор действия а не клиент). Попробовал ICEFaces ajax push: клиент открывает соединение, оно какое-то время висит открытым, потом открывается следующее и так далее (long polling). Но что-то они какие-то глючные. То работает то нет. Я на все плюнул, и решил старым дедовским способом просто пинговать сервер из клиента аяксом по таймеру. Что-то вроде Comet все равно получается, да? Работает прекрасно. Раз в 30 секунд пинг, меня устраивает. Просто, надежно. Но возникла проблема с таймаутом сессии. Ведь идея в том, что весь этот механизм что я реализовал не должен обновлять сессию. А так получается что из-за того, что у меня клиент каждые 30 секунд дергает сервлет, сессия никогда не умрет. Как быть, господа? Вот, как обычно бывает, второй раз уже за сегодня - пока писал, пришла мысль в голову. В сессии создать какой-нибудь атрибут типа: ACCESSED = время последнего доступа к сессии (не через аякс пушер) Пропускать запросы через фильтр: если запрос пришел от аякс пушера (т.е. по таймеру), то этот атрибут ACCESSED не обновлять. А если это обычный запрос от клиента, то обновить ACCESSED. И причем еще и проверить, если ACCESSED слишком устарел - то значит от клиента запрос приходил давно (не считая ajax push запросов) - инвалидировать сессию. PS: Только что узнал про новую фишку Servlet 3: javax.servlet.AsyncContext Может есть смысл ее использовать в своем сервлете ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2013, 15:24:11 |
|
||
|
Ajax push и session timeout
|
|||
|---|---|---|---|
|
#18+
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 контекст или нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2013, 15:39:21 |
|
||
|
Ajax push и session timeout
|
|||
|---|---|---|---|
|
#18+
rabiter, и в терминологии немного плаваете Server push - это то что требуется реализовать - нотификацию от сервера - клиенту Polling - переодический опрос сервера Long polling - долгий запрос к серверу, чтобы предоставить серверу канал для push Comet - шуточное, но прижившееся, имя для Long polling (Ajax и Comet - чистящие средства) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2013, 15:44:40 |
|
||
|
Ajax push и session timeout
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, авторНу, стоило попробовать разобраться. Пробовал. Несколько дней разочарования. Живет свое собственной жизнью - такое чувство что сырой функционал выложили в релиз. Хотя с тех пор, как я пробовал уже новая версия вышла, но осадок уже остался, как говорится. авторНет, это просто polling - очевидное решение в рамках HTTP. Long polling, он же Comet, это альтернатива, которая позволяет обойти недостатки polling. Можно спросить, а в чем недостатки простого polling? Только в том, что слишком часто идут запросы, со всем вытекающим из этого? авторДа, что-то типа такого. Это простейшее решение и рабочее. Значит лучшее по Оккаму. :-) авторА у вас сервер уже реализует Servlet 3? Стоит определится, нужен ли JSF контекст или нет. Да, Servlet 3, это же JavaEE 6, у нас последний гласфиш. С помощью AsyncContext можно реализовать Long polling. Спасибо за ответ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2013, 15:54:41 |
|
||
|
Ajax push и session timeout
|
|||
|---|---|---|---|
|
#18+
Blazkowiczrabiter, и в терминологии немного плаваете Server push - это то что требуется реализовать - нотификацию от сервера - клиенту Polling - переодический опрос сервера Long polling - долгий запрос к серверу, чтобы предоставить серверу канал для push Comet - шуточное, но прижившееся, имя для Long polling (Ajax и Comet - чистящие средства) Ясно, спасибо за информацию. Я не знал что Ajax это чистящее средство)) Думаю, что термин Ajax Push тоже имеет право на существование. Ведь Server Push можно и без аякса реализовать, а обычным запросом во фрейме. Ajax Push в этом случае больше сужает понятие Server Push'а) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2013, 15:59:45 |
|
||
|
Ajax push и session timeout
|
|||
|---|---|---|---|
|
#18+
rabiter, запрос по таймеру самое простое средство - его и бери. Время сессии измени \ обнули \ кончи через API ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2013, 16:15:58 |
|
||
|
Ajax push и session timeout
|
|||
|---|---|---|---|
|
#18+
Petro123, Yep, спасибо за ответ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2013, 16:17:42 |
|
||
|
Ajax push и session timeout
|
|||
|---|---|---|---|
|
#18+
rabiterМожно спросить, а в чем недостатки простого polling? Только в том, что слишком часто идут запросы, со всем вытекающим из этого? Ну, конечно. Частые запросы - лишняя нагрузка на сервер. Редкие запросы - большая задержка между событием на сервере и получением его на клиенте. Ещё вот в соседней теме была задача log писать с сервера на клиент. Тут проблема в том что при polling это лог нужно где-то накапливать, чистить и синхронизировать запись\чтение. Для подобной задачи Comet намного лучше. Но если нужна просто небольшая нотификация, то polling - OK. rabiterДа, Servlet 3, это же JavaEE 6, у нас последний гласфиш. С помощью AsyncContext можно реализовать Long polling. И у вас гласфиш, что же это за мода такая пошла... Тоже заказчик настоял? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2013, 16:22:29 |
|
||
|
Ajax push и session timeout
|
|||
|---|---|---|---|
|
#18+
rabiterВот, как обычно бывает, второй раз уже за сегодня - пока писал, пришла мысль в голову. В сессии создать какой-нибудь атрибут типа: ACCESSED = время последнего доступа к сессии (не через аякс пушер) Пропускать запросы через фильтр: если запрос пришел от аякс пушера (т.е. по таймеру), то этот атрибут ACCESSED не обновлять. А если это обычный запрос от клиента, то обновить ACCESSED. И причем еще и проверить, если ACCESSED слишком устарел - то значит от клиента запрос приходил давно (не считая ajax push запросов) - инвалидировать сессию. У меня ситуация была как раз наоборот - мне надо было, чтобы сессия не падала при клиенте с поллингом ... Идея неплоха, я не подскажу КАК ее реализовать, но смогу подсказать ГДЕ найти решение. Есть продукт GraniteDS, позволяющий реализовать с помощью своего инструмента Gravity устойчивый ServerPush. Так вот, в его настройках присутствуют параметры с таймаутом для сессии. Я так понимаю, что раз параметр прописывается и он по истечении этого времени "роняет" сессию, то как-то этот механизм у него реализован. Так как это продукт с открытым кодом (на сайте можно найти все исходники), то моэно и подсмотреть, чего они там и как дергают. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2013, 16:24:10 |
|
||
|
Ajax push и session timeout
|
|||
|---|---|---|---|
|
#18+
авторИ у вас гласфиш, что же это за мода такая пошла... Тоже заказчик настоял? :D ну а что такого? Вполне так сервер, все лучше чем веб сфера 6-я, а ведь и с ней приходится на некоторых проектах работать)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2013, 16:28:21 |
|
||
|
Ajax push и session timeout
|
|||
|---|---|---|---|
|
#18+
rabiter:D ну а что такого? Глючное оно. rabiterВполне так сервер, все лучше чем веб сфера 6-я, а ведь и с ней приходится на некоторых проектах работать)) [/quot] И почему не JBoss? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2013, 16:29:45 |
|
||
|
Ajax push и session timeout
|
|||
|---|---|---|---|
|
#18+
ну и самое "свежее", это слоган: авторWebSockets — полноценный асинхронный веб ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2013, 16:30:16 |
|
||
|
Ajax push и session timeout
|
|||
|---|---|---|---|
|
#18+
Blazkowiczrabiter:D ну а что такого? Глючное оно. Не особо замечал. Но и в дебри глассфиша правда не залезал. авторИ почему не JBoss? На нем тоже должен работать проект. Кстати, JBoss же тоже JavaEE6 уже давно наверное? Значит там тоже есть Servlet 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2013, 16:36:35 |
|
||
|
Ajax push и session timeout
|
|||
|---|---|---|---|
|
#18+
IDVsbruck, Спасибо за наводку! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2013, 16:37:14 |
|
||
|
Ajax push и session timeout
|
|||
|---|---|---|---|
|
#18+
Petro123ну и самое "свежее", это слоган: авторWebSockets — полноценный асинхронный веб Хмм, а это интересно. Жалко только что, как я понял, IE поддерживает Web Sockets только начиная с 10 версии. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2013, 16:38:08 |
|
||
|
Ajax push и session timeout
|
|||
|---|---|---|---|
|
#18+
rabiterХмм, а это интересно. Жалко только что, как я понял, IE поддерживает Web Sockets только начиная с 10 версии. http://jfarcand.wordpress.com/2012/04/19/websockets-or-comet-or-both-whats-supported-in-the-java-ee-land/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2013, 16:43:16 |
|
||
|
Ajax push и session timeout
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, Спасибо за статью. Это абсолютно новая темя для меня. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2013, 16:46:45 |
|
||
|
Ajax push и session timeout
|
|||
|---|---|---|---|
|
#18+
rabiterначиная с 10 версии каждый сам решает, какой у него проект - крутой, простой или "сферический конь в вакууме для обучения себя любимого". )) ______________________________________________ "Сложнее всего в мире достигнуть простоты — это крайняя граница опыта и последнее усилие гения". © George Sand. AutoPOI.ru — ГИС-технологии для Oracle ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2013, 16:51:15 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38118244&tid=2130153]: |
0ms |
get settings: |
17ms |
get forum list: |
25ms |
check forum access: |
6ms |
check topic access: |
6ms |
track hit: |
54ms |
get topic data: |
19ms |
get forum data: |
4ms |
get page messages: |
83ms |
get tp. blocked users: |
2ms |
| others: | 307ms |
| total: | 523ms |

| 0 / 0 |
