![]() |
|
Модераторы: Sardar, Aliance |
![]()
|
|
| Sun |
|
|||
|
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 |
|||
|
||||
| skyboy |
|
|||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 3 Всего: 260 |
порубится политиками безопасности, ну, если забить на ИЕ до 10 и есть доступ к серверу, то можно заюзать Cross-Origin XHR универсальнее всего: динамическое создание элемента <script> — запрос в параметрах URL'a, ответ — внутри, в виде самозапускающейся функции. |
|||
|
||||
| ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 48 Всего: 386 |
Не идет ли речь об обычном Comet? Вроде довольно много рецептов клиентской (javascript) части уже существует. И longpoll и websockets и iframe транспорт, на любые потребности-возможности.
-------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
|||
|
||||
| skyboy |
|
|||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 3 Всего: 260 |
Comet — это уровнем выше. может использовать XHR/IFrame/script tag как транспорт. и для разных доменов первые два подхода так и вызовут проблемы.
Комет решает проблему с частым(и зачастую — безрезультатным) опросом сервера по таймауту. Я считаю, что лучше начать с однокомпонентного решения без Комет, а потом уже что-то менять, когда в гости постучаться проблемы нагрузки. |
|||
|
||||
| Sun |
|
|||
|
Account removed ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1611 Регистрация: 14.8.2002 Репутация: нет Всего: 48 |
Ну вообще подразумевается использования мобильных броузеров как и компиляция приложения при помощи PhoneGap под Андроид (для начала). Что до политики - так как используется PhoneGap есть возможность их отрубать. Мобильный клиент вполне может подключаться к любым урлам, невзирая на ограничения кросс-сайт скриптинга. Хм. Не слышал. Надо почитать. Спасибо. Я посмотрел на простые реализации подобного канала связи, на примере чатов. Все они работают по принципу рекурсивного вызова функции опроса, которая после возврата из колбэка снова вызывает саму себя. Меня такой подход несколько настораживает, так как время ожидания может быть достаточно длительным. Боюсь что может произойти отлуп от сервера по тайм-ауту. Ведь это только с точки зрения джава-скрипта запрос выглядит асинхронным. Реально происходит самый обычный POST HTTP запрос, который не может висеть в течении часа. -------------------- Account removed |
|||
|
||||
| ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 48 Всего: 386 |
Sun,
Это longpoll. Есть еще пара вполне годных подходов, websockets кажется самым эффективным, хотя и не самым кроссбраузерным. Хотя в какой-то степени, все они "после колбэка вызывают саму себя". А имеет ли смысл закладываться на Javascript при такой насыщености Java? Может и клиент на Java сделать? Все одно на мобильные платформы портировать. Да и протокол связи можно накрутить какой нужен, а не какой получится из http? -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
|||
|
||||
| Sun |
|
|||
|
Account removed ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1611 Регистрация: 14.8.2002 Репутация: нет Всего: 48 |
Имеет. Мобильная джава - вчерашний день. Сегодняшние реалии таковы, что надо юзать HTML5, JavaScript, CSS. Это всё красивенько компилится под любую мобильную платформу и устанавливается как стандартное приложение. То на что уходит огромное число кода на JavaME, с использованием того же JQueryMobile умещается в несколько строк. Легче заниматься поддержкой, легче найти того, кому можно спихнуть дальнейшую разработку. Я люблю простые и красивые решения Похоже придется пойти по пути рекурсивного опроса. С веб-сокетами наверно не получится, по причине отсутствия реализации для AppEngine. -------------------- Account removed |
|||
|
||||
| skyboy |
|
|||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 3 Всего: 260 |
ну, если ты можешь управлять политиками безопасности, XHR красивее — только данные передаются, никакого исполняемого кода. longpoll не только вебсокетами можно реализовать. предполагается, что обычный HTTP запрос может висеть очень долго живым с отдачей ответа частями. Чем не устраивает? |
|||
|
||||
| Sun |
|
|||
|
Account removed ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1611 Регистрация: 14.8.2002 Репутация: нет Всего: 48 |
В AppEngine который выступает в качестве веб-сервера таймаут на запрос всего 30 секунд. Это значит что как минимум раз в 30 секунд надо будет посылать новый запрос. Но похоже другого выхода нет. -------------------- Account removed |
|||
|
||||
| Sun |
|
|||
|
Account removed ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1611 Регистрация: 14.8.2002 Репутация: нет Всего: 48 |
Хм. Нашел интересный вариант. Люди утверждают что каналы AppEngine работают даже если скрипт расположен в другом месте. Надо лишь указать полный путь
http://stackoverflow.com/questions/1087444...ith-the-channel Надо попробовать -------------------- Account removed |
|||
|
||||
| Sun |
|
|||
|
Account removed ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1611 Регистрация: 14.8.2002 Репутация: нет Всего: 48 |
Локально получилось! А для мобильного надо скачивать скрипт http://localhost:8888/_ah/channel/jsapi, менять ему BASE_URL и тогда каналы работают даже на мобильном телефоне!
Осталось попробовать на реальном сервере. Проблемка только в том что на сервере скрипт обусфаканный. Это сообщение отредактировал(а) Sun - 14.1.2013, 11:59 -------------------- Account removed |
|||
|
||||
| Sun |
|
|||
|
Account removed ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1611 Регистрация: 14.8.2002 Репутация: нет Всего: 48 |
Подсунул телефонному приложению скрипт https://talkgadget.google.com/talkgadget/channel.js. Это скрипт по работе с каналами AppEngine. И каналы работают! А все чуваки на разных форумах писали что это импосыбл
-------------------- Account removed |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | JavaScript: для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |