![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
Luceus |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 105 Регистрация: 24.3.2006 Репутация: нет Всего: 1 |
Всем добрый день!
Подскажите, пожалуйста, где копать, что бы можно было реализовать следующее. Необходимо, чтобы при выполнении какой-то операции на сервере, пользователю в браузер отправлялся XML с информацией о выполняемых тасках на сервере. Например, пользователь нажал создать объект. Сервлет принял эту информацию, и начал обрабатывать действие. И уведомляет об этом пользователя. Пользователь может выключить браузер, и запустить его позже, с продолжением получения информации о выполняемых работах. Как это реализовать? Аналогично, другое. Пользователь вводит логин и пароль. Переходит на страницу чата. Тем временем на стороне сервера произошел коннект с чат-сервером, и постоянно поддерживается коннект. И лишь время от времени на странице пользователя происходит запрос о новых сообщениях, и если таковые имеются, возвращается XML. Заранее спасибо. |
|||
|
||||
nornad |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1079 Регистрация: 16.2.2007 Где: в Караганде Репутация: нет Всего: 31 |
В случае браузера инициатором является всегда клиент, так что только вариант, когда на клиенте регулярно вызывается некий метод, который спрашивает сервер, нет было ли чего интересного в последнее время.
-------------------- Три достоинства программиста: Леность, Нетерпение и Гордость Ларри Уолл |
|||
|
||||
Luceus |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 105 Регистрация: 24.3.2006 Репутация: нет Всего: 1 |
nornad, согласен. Так а как сохранить на стороне сервера тоже соединение с сервером ICQ, что бы с определенной периодичностью можно было запрашивать данные о состоянии из браузера?? Я так понимаю, что после того, как тот же сервлет передает информацию клиенту, инстанс его освобождается.
|
|||
|
||||
batigoal |
|
|||
![]() Нелетучий Мыш ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6423 Регистрация: 28.12.2004 Где: Санктъ-Петербургъ Репутация: 16 Всего: 151 |
Освобождается, конечно - ведь его цикл завершен. Но ничто не мешает запустить на сервере какой-то "вечный" класс (который отнюдь не обязан быть сервлетом) и из его недр удерживать открытые коннекты к асечному серверу. -------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли) ЖоржЖЖ |
|||
|
||||
Luceus |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 105 Регистрация: 24.3.2006 Репутация: нет Всего: 1 |
batigoal, вот как раз я об этом
![]() ![]() |
|||
|
||||
batigoal |
|
|||
![]() Нелетучий Мыш ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6423 Регистрация: 28.12.2004 Где: Санктъ-Петербургъ Репутация: 16 Всего: 151 |
Дык, а какой тут нужен пример?
![]() -------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли) ЖоржЖЖ |
|||
|
||||
Luceus |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 105 Регистрация: 24.3.2006 Репутация: нет Всего: 1 |
batigoal, может я не корректно задал вопрос. Если это не сервлет, то каким образом его запускать в сервере приложений? Я только начинающий, и поэтому спрашиваю всякие глупости.
Спасибо. |
|||
|
||||
Stampede |
|
|||
![]() Гносеолог ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 963 Регистрация: 25.4.2005 Где: Calgary, Alberta, Canada Репутация: 66 Всего: 144 |
Туь можно предложить примерно такую архитектуру. Создаем в базе очередь сообщений, скажем, вида (msg_id, msg_time, msg_user_id, msg_text). Заполняем какими-то данными. Например, пишем тестовый генератор, который добавляет по одному сообщению в минуту. Теперь самое интересное: как это выдать юзеру. Довольно просто на самом деле. Юзер через XMLHttpRequest выдает запрос по адресу, скажем, /messages.do?uid=1234. По этому запросу запускается сервлет, который и будет этим самым "вечным классом", как ты изволил выразиться. Его задача - выдать в выходной поток все юзерские сообщения, которые накопились к данному моменту, и после этого не закрывать поток, а ждать поступления новых собщений для данного юзера (эту часть можно реализовать через wait/notify). Таким образом сервлет будет висеть в памяти до тех пор, пока юзер не закончит сессию/закроет браузер. Что касается прослушивания линии на стороне браузера, т. е. обработки поступающих сообщений в ответе XMLHttpRequest, то там не все так просто. Вот тут можно найти обсуждения варианта транспорта:Ну и гуголь в руки, разумеется ![]() Это сообщение отредактировал(а) Stampede - 29.1.2008, 19:56 -------------------- "If you want something done right, do it yourself" По секрету: выучить английский - реально! |
|||
|
||||
Luceus |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 105 Регистрация: 24.3.2006 Репутация: нет Всего: 1 |
Всем спасибо. Я нашел решение. Необходимо при создании сервлета имплементировать интерфейс Runnable. Этим самым мы говорим, что сервлет будет работать в фоновом режиме. Если мы хотим, что бы этот скрипт запускался сразу, как только будет стартанут сервер, необходимо в web.xml прописать <load-on-startup/>
Вопрос снят. ![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |