Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > Flex

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 15.09.2010, 22:03
Dimitry_II вне форума Посмотреть профиль Отправить личное сообщение для Dimitry_II Найти все сообщения от Dimitry_II
  № 1  
Ответить с цитированием
Dimitry_II

Регистрация: Jan 2010
Сообщений: 211
По умолчанию Flex - BlazeDS - Java: контроль присутсвия клиента

Сушу себе голову ...
Сделал messaging через канал streaming-amf (Producer & Consumer). Основной функционал, для которого мне нужен был messaging, отлично работает - клиент подписывается и получает уведомления с сервера без задержек и по возникновению серверных событий (server push).
Однако я хотел также посредством данной "штуки" контролировать "присутствие клиента в системе" типа того, как это происходит с сокетным соединением, когда при "отваливании" клиента сервер об этом тут же узнает, вне зависимости от способа отключения. Но как этого добиться, я не представляю, хотя раз пользователь подписан, то, надо полагать, канал установлен и при его разрыве что-то должно реагировать.
Подскажите, плиз, можно ли это сделать? Если нет, то каким еще образом я могу осуществлять такой контроль? (поллинг совершенно не хочу использовать, также создавать свой Socket не хотелось бы).

Добавлено через 21 минуту
Из описания:

StreamingAMFChannel / StreamingAMFEndpoint
Uses the HTTP 1.1 ‘chunked’ server push model instead of polling for data
from the server. An internal HTTP connection to the server is held open
so the server can stream data to the client with little overhead. Cannot be
compressed or proxied.

Я такое делал ручками (только используя NIO) и это действительно открытый постоянный сокет, где происходит обмен порциями данных - "chunk". При подписывании на получение уведомлений сокет создается, при отказа - закрывается. В любом случае, при создании такой штуки я получал собитие на сервере и при подключении, и при получении данных, и при ошибках связи, и при потери связи, и при дисконнекте.

Уверен, что и тут можно как-то побороть это, но пока непонятно как.

Добавлено через 32 часа 3 минуты
Ну полный беспредел ...
Нашел такую штуку: если в кастомном адаптере, расширяющем базовый ServiceAdapter, переопределить метод
@Override
public boolean handlesSubscriptions() {
return true;
}
то внутренний менеджер начнет получать все сообщения
@Override
public Object manage(CommandMessage commandMessage) {
System.out.println("Manage got message.");
return null;
}
Переменная commandMessage имеет свойство getOperation(), где можно получить код. При отключении вываливается с чем-то типа UNSUBSCRIBE.

То есть задуманное сработало, только вот получаю это сообщение (реакцию на дисконнект) через 63-64 секунды (3-4 секунды даю на погрешности и на срабатывание дебаггера). Пытался отыскать что отвечает за эту "паузу" - не нашел. Так как до сих пор использовал BlazeDS 3, то решил перейти на 4. После обновления библиотек даже этот механизм перестал работать. Что делать, куда смотреть?

Старый 22.09.2010, 21:59
vola62 вне форума Посмотреть профиль Отправить личное сообщение для vola62 Найти все сообщения от vola62
  № 2  
Ответить с цитированием
vola62

Регистрация: Sep 2009
Сообщений: 28
Я тоже не нашёл решения - чтоб красиво обновить список сразу при дисконнекте. Что я сделал - так - это что каждый клиент через каждые несколько сек (примерно 30 - не помню точно) - шлёт на сервер - "я живой" - и тот запоминает(true) и где-то раз в 25 сек - обходит список. - если не живой - говорит всем заинтересованным - что такой-то отвалился...

Старый 22.09.2010, 22:39
Dimitry_II вне форума Посмотреть профиль Отправить личное сообщение для Dimitry_II Найти все сообщения от Dimitry_II
  № 3  
Ответить с цитированием
Dimitry_II

Регистрация: Jan 2010
Сообщений: 211
Не, это даже не костыль, это гналая заплатка , которую стыдно вставлять в мало-мальски серьезный проект.
Проблема решена, причем, самостоятельно. Решение публиковать тут не буду, оно есть на форуме sql.ru в разделе Java. Решение получилось скорее интуитивно и методом множественного тыка, но работает! (Задержка в 1-2 секунды не в счет)

Создать новую тему Ответ Часовой пояс GMT +4, время: 15:26.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 15:26.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.