Форум 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. После обновления библиотек даже этот механизм перестал работать. Что делать, куда смотреть?

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

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

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


 


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


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