Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ожидание события на сервере, что-то вроде AppEngine channels 
V
    Опции темы
Sun
Дата 3.1.2013, 13:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Account removed
***


Профиль
Группа: Экс. модератор
Сообщений: 1611
Регистрация: 14.8.2002

Репутация: нет
Всего: 48



Задача следующего рода. Есть клиент написанный на JQuery. Есть серверная часть - Java Servlet. Нужно организовать что-то вроде канала связи по типу AppEngine Channel https://developers.google.com/appengine/docs/java/channel/

К сожалению нет возможности использовать непосредственно Channel API, так как клиент расположен не там же где и сервер. Что не дает возможности обращения к сервисам AppEngine.

В оригинальном Channel API создается канал связи к которому подключается клиент. Клиенту можно в любой момент времени отослать сообщение - текстовую строку. Клиент может в зависимости от содержимого этой строки выполнить какие-то действия - допустим обновить контент на странице.

Если делать реализацию стандартными средствами жаба-скрипта, то на ум приходит лишь посылка асинхронного запроса на сервер и дальнейшее длительное ожидание ответа. После получение ответа, сразу посылать новый запрос. Хочется спросить уважаемых экспертов, есть ли какие-то более элегантные пути организации такого канала оповещения клиентов? Может есть что-то более продвинутое?


--------------------
Account removed
PM MAIL   Вверх
skyboy
Дата 3.1.2013, 16:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 3
Всего: 260



Цитата(Sun @  3.1.2013,  12:27 Найти цитируемый пост)
посылка асинхронного запроса на сервер

порубится политиками безопасности, 
Цитата(Sun @  3.1.2013,  12:27 Найти цитируемый пост)
так как клиент расположен не там же где и сервер

ну, если забить на ИЕ до 10 и есть доступ к серверу, то можно заюзать Cross-Origin XHR
универсальнее всего: динамическое создание  элемента <script> — запрос в параметрах URL'a, ответ — внутри, в виде самозапускающейся функции.
PM MAIL   Вверх
ksnk
Дата 3.1.2013, 17:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 48
Всего: 386



Не идет ли речь об обычном Comet? Вроде довольно много рецептов клиентской (javascript) части уже существует. И longpoll и websockets и iframe транспорт, на любые потребности-возможности. 


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
skyboy
Дата 3.1.2013, 17:48 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 3
Всего: 260



Comet — это уровнем выше. может использовать XHR/IFrame/script tag как транспорт. и для разных доменов первые два подхода так и вызовут проблемы.
Комет решает проблему с частым(и зачастую — безрезультатным) опросом сервера по таймауту.
Я считаю, что лучше начать с однокомпонентного решения без Комет, а потом уже что-то менять, когда в гости постучаться проблемы нагрузки.
PM MAIL   Вверх
Sun
Дата 4.1.2013, 12:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Account removed
***


Профиль
Группа: Экс. модератор
Сообщений: 1611
Регистрация: 14.8.2002

Репутация: нет
Всего: 48



Цитата(skyboy @  3.1.2013,  13:45 Найти цитируемый пост)
ну, если забить на ИЕ до 10 и есть доступ к серверу, то можно заюзать Cross-Origin XHR

Ну вообще подразумевается использования мобильных броузеров как и компиляция приложения при помощи PhoneGap под Андроид (для начала). 

Цитата(skyboy @  3.1.2013,  13:45 Найти цитируемый пост)
порубится политиками безопасности, 

Что до политики - так как используется PhoneGap есть возможность их отрубать. Мобильный клиент вполне может подключаться к любым урлам, невзирая на ограничения кросс-сайт скриптинга.


Цитата(ksnk @  3.1.2013,  14:44 Найти цитируемый пост)
Не идет ли речь об обычном Comet?

Хм. Не слышал. Надо почитать. Спасибо.

Я посмотрел на простые реализации подобного канала связи, на примере чатов. Все они работают по принципу рекурсивного вызова функции опроса, которая после возврата из колбэка снова вызывает саму себя. Меня такой подход несколько настораживает, так как время ожидания может быть достаточно длительным. Боюсь что может произойти отлуп от сервера по тайм-ауту. Ведь это только с точки зрения джава-скрипта запрос выглядит асинхронным. Реально происходит самый обычный POST HTTP запрос, который не может висеть в течении часа.




--------------------
Account removed
PM MAIL   Вверх
ksnk
Дата 4.1.2013, 12:48 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 48
Всего: 386



Sun, 
Цитата(ksnk @  3.1.2013,  17:44 Найти цитируемый пост)
И longpoll и websockets и iframe транспорт, на любые потребности-возможности.


Цитата(Sun @  4.1.2013,  12:02 Найти цитируемый пост)
Все они работают по принципу рекурсивного вызова функции опроса

Это longpoll. Есть еще пара вполне годных подходов, websockets кажется самым эффективным, хотя и не самым кроссбраузерным. Хотя в какой-то степени, все они "после колбэка вызывают саму себя".

А имеет ли смысл закладываться на Javascript при такой насыщености Java? Может и клиент на Java сделать? Все одно на мобильные платформы портировать. Да и протокол связи можно накрутить какой нужен, а не какой получится из http?


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Sun
Дата 4.1.2013, 13:02 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Account removed
***


Профиль
Группа: Экс. модератор
Сообщений: 1611
Регистрация: 14.8.2002

Репутация: нет
Всего: 48



Цитата(ksnk @  4.1.2013,  09:48 Найти цитируемый пост)
А имеет ли смысл закладываться на Javascript при такой насыщености Java? Может и клиент на Java сделать? Все одно на мобильные платформы портировать. Да и протокол связи можно накрутить какой нужен, а не какой получится из http? 

Имеет. Мобильная джава - вчерашний день. Сегодняшние реалии таковы, что надо юзать HTML5, JavaScript, CSS. Это всё красивенько компилится под любую мобильную платформу и устанавливается как стандартное приложение. 

То на что уходит огромное число кода на JavaME, с использованием того же JQueryMobile умещается в несколько строк. Легче заниматься поддержкой, легче найти того, кому можно спихнуть дальнейшую разработку. Я люблю простые и красивые решения  smile 

Похоже придется пойти по пути рекурсивного опроса. С веб-сокетами наверно не получится, по причине отсутствия реализации для AppEngine.


--------------------
Account removed
PM MAIL   Вверх
skyboy
Дата 4.1.2013, 16:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 3
Всего: 260



Цитата(Sun @  4.1.2013,  12:02 Найти цитируемый пост)
Похоже придется пойти по пути рекурсивного опроса

ну, если ты можешь управлять политиками безопасности, XHR красивее — только данные передаются, никакого исполняемого кода.
longpoll не только вебсокетами можно реализовать. предполагается, что обычный HTTP запрос может висеть очень долго живым с отдачей ответа частями. Чем не устраивает?
PM MAIL   Вверх
Sun
Дата 4.1.2013, 17:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Account removed
***


Профиль
Группа: Экс. модератор
Сообщений: 1611
Регистрация: 14.8.2002

Репутация: нет
Всего: 48



Цитата(skyboy @  4.1.2013,  13:04 Найти цитируемый пост)
предполагается, что обычный HTTP запрос может висеть очень долго живым с отдачей ответа частями. Чем не устраивает? 

В AppEngine который выступает в качестве веб-сервера таймаут на запрос всего 30 секунд. Это значит что как минимум раз в 30 секунд надо будет посылать новый запрос. Но похоже другого выхода нет.


--------------------
Account removed
PM MAIL   Вверх
Sun
Дата 5.1.2013, 12:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Account removed
***


Профиль
Группа: Экс. модератор
Сообщений: 1611
Регистрация: 14.8.2002

Репутация: нет
Всего: 48



Хм. Нашел интересный вариант. Люди утверждают что каналы AppEngine работают даже если скрипт расположен в другом месте. Надо лишь указать полный путь

Код

<head>
    <script language="javascript" type="text/javascript" src="http://myapp.appspot.com/_ah/channel/jsapi"></script>
</head>


http://stackoverflow.com/questions/1087444...ith-the-channel

Надо попробовать


--------------------
Account removed
PM MAIL   Вверх
Sun
Дата 14.1.2013, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Account removed
***


Профиль
Группа: Экс. модератор
Сообщений: 1611
Регистрация: 14.8.2002

Репутация: нет
Всего: 48



Локально получилось! А для мобильного надо скачивать скрипт http://localhost:8888/_ah/channel/jsapi, менять ему BASE_URL и тогда каналы работают даже на мобильном телефоне!

Осталось попробовать на реальном сервере. Проблемка только в том что на сервере скрипт обусфаканный.

Это сообщение отредактировал(а) Sun - 14.1.2013, 11:59


--------------------
Account removed
PM MAIL   Вверх
Sun
Дата 19.1.2013, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Account removed
***


Профиль
Группа: Экс. модератор
Сообщений: 1611
Регистрация: 14.8.2002

Репутация: нет
Всего: 48



Подсунул телефонному приложению скрипт https://talkgadget.google.com/talkgadget/channel.js. Это скрипт по работе с каналами AppEngine. И каналы работают! А все чуваки на разных форумах писали что это импосыбл  smile 


--------------------
Account removed
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1182 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.