| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java EE (J2EE) и Spring > Организация нотификации пользователя |
| Автор: Luceus 28.1.2008, 15:32 |
| Всем добрый день! Подскажите, пожалуйста, где копать, что бы можно было реализовать следующее. Необходимо, чтобы при выполнении какой-то операции на сервере, пользователю в браузер отправлялся XML с информацией о выполняемых тасках на сервере. Например, пользователь нажал создать объект. Сервлет принял эту информацию, и начал обрабатывать действие. И уведомляет об этом пользователя. Пользователь может выключить браузер, и запустить его позже, с продолжением получения информации о выполняемых работах. Как это реализовать? Аналогично, другое. Пользователь вводит логин и пароль. Переходит на страницу чата. Тем временем на стороне сервера произошел коннект с чат-сервером, и постоянно поддерживается коннект. И лишь время от времени на странице пользователя происходит запрос о новых сообщениях, и если таковые имеются, возвращается XML. Заранее спасибо. |
| Автор: nornad 28.1.2008, 16:56 |
| В случае браузера инициатором является всегда клиент, так что только вариант, когда на клиенте регулярно вызывается некий метод, который спрашивает сервер, нет было ли чего интересного в последнее время. |
| Автор: Luceus 28.1.2008, 17:24 |
| nornad, согласен. Так а как сохранить на стороне сервера тоже соединение с сервером ICQ, что бы с определенной периодичностью можно было запрашивать данные о состоянии из браузера?? Я так понимаю, что после того, как тот же сервлет передает информацию клиенту, инстанс его освобождается. |
| Автор: Luceus 29.1.2008, 13:43 |
| batigoal, вот как раз я об этом |
| Автор: batigoal 29.1.2008, 14:55 |
| Дык, а какой тут нужен пример? |
| Автор: Luceus 29.1.2008, 19:06 |
| batigoal, может я не корректно задал вопрос. Если это не сервлет, то каким образом его запускать в сервере приложений? Я только начинающий, и поэтому спрашиваю всякие глупости. Спасибо. |
| Автор: Stampede 29.1.2008, 19:53 | ||
Туь можно предложить примерно такую архитектуру. Создаем в базе очередь сообщений, скажем, вида (msg_id, msg_time, msg_user_id, msg_text). Заполняем какими-то данными. Например, пишем тестовый генератор, который добавляет по одному сообщению в минуту. Теперь самое интересное: как это выдать юзеру. Довольно просто на самом деле. Юзер через XMLHttpRequest выдает запрос по адресу, скажем, /messages.do?uid=1234. По этому запросу запускается сервлет, который и будет этим самым "вечным классом", как ты изволил выразиться. Его задача - выдать в выходной поток все юзерские сообщения, которые накопились к данному моменту, и после этого не закрывать поток, а ждать поступления новых собщений для данного юзера (эту часть можно реализовать через wait/notify). Таким образом сервлет будет висеть в памяти до тех пор, пока юзер не закончит сессию/закроет браузер. Что касается прослушивания линии на стороне браузера, т. е. обработки поступающих сообщений в ответе XMLHttpRequest, то там не все так просто. Вот тут можно найти обсуждения варианта транспорта:
|
| Автор: Luceus 29.1.2008, 22:04 |
| Всем спасибо. Я нашел решение. Необходимо при создании сервлета имплементировать интерфейс Runnable. Этим самым мы говорим, что сервлет будет работать в фоновом режиме. Если мы хотим, что бы этот скрипт запускался сразу, как только будет стартанут сервер, необходимо в web.xml прописать <load-on-startup/> Вопрос снят. |