|
|
|
AJAX (COMET & HTTP Streaming)
|
|||
|---|---|---|---|
|
#18+
Подскажите пожалуйста, возможно ли rеализовать такой функционал используя COMET, HTTP Streaming. Сейчас я использую Yahoo YUI, а события с сервера проверяю периодически по таймеру (HTTP Pull). Только что узнал что есть более интересные технологии, и хотел бы переделать клиента. Вопрос в том, насколько это возможно, и какие библиотеки лучше использовать (в данный момент, все что перечисленно сделано на YUI)? Функционал. - AJAX отправка формы. - AJAX отправка формы может включать файлы, которые асинхронно загружаются на сервер. - Отказ от тега <form> (при нажатии на кнопку "отправить" из нужных инпут-элементов, включая файлы строится виртуальная/невидимая форма и отправляется на сервер, асинхронно). - При получении ответа на AJAX запрос обновляется нужный элемент DOM. - События инициированные сервером - сервер может самостоятельно инициировать событие и поменять любой элемент DOM (сейчас сделано обновление по таймеру, хочу переделать как COMET, HTTP Streaming). YUI классная вещь, но эти технологии он не поддерживает. - AJAX редирект - Получаемый HTML должен быть индексируемым (т.е. фактически индексируемым будет только первый вариант страницы, который получается при первом GET запросе, изменения, что случаются со страницей далее, после множества AJAX запросов конечно-же поисковикам видны не будут, GWT например не подойдет). - Закладки должны работать (т.е. фреймворк должен работать "ненавязчиво", встраиватся в HTML и обычный механизм GET запросов, но не мешать ему, GWT например не подойдет). - Все это должно работать в Firefox, IE, Opera. - Желательно не очень большой вес фреймворка. - Дружественность API фреймворка и наличие в нем различных эффектов не важна, напрямую с ним разработчики работать не будут, он будет использоваться только исключительно для вышеперечисленных задач. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2008, 19:02 |
|
||
|
AJAX (COMET & HTTP Streaming)
|
|||
|---|---|---|---|
|
#18+
Забыл уточнить, конечно-же необязательно делать абсолютно все эти вещи через COMET, через комет хотелось бы только: - События инициированные сервером. Но дело в том, что самостоятельно добавить это к YUI я не смогу, а использовать еще один фреймворк - будет много весить и они могут мешать друг-другу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2008, 19:05 |
|
||
|
AJAX (COMET & HTTP Streaming)
|
|||
|---|---|---|---|
|
#18+
Много думал ... А возможно это сделать таким образом? Оставить все как есть, но добавить в JS вместо таймера постоянно работающее JS соединение с сервером. Т.е. оно работает постоянно, параллельно с основным AJAX процессингом и никак на него не влияет. А когда сервер хочет послать событие клиенту он посылает обновление, оно производится независимо от основного AJAX процессинга, JS обновляет DOM и слушает дальше. Вопросы тут - позволяет ли JS параллельно запускать несколько процессов, синхронизация обновления DOM с основным процессом и возможно-ли одновременно устанавливать несколько соединений с сервером? Хотя, вопрос синхронизации можно в принципе решать на сервере. П.С. Я правильно понимаю, что когда мы передаем с параметрами файлы на сервер, все это передается в одном соединении, и они просто разделены метками в одном и том-же потоке данных? А веб-сервер уже парсит этот поток и представляет его приложению как хеш из обычных параметров и группы сохранненных на диске файлов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2008, 20:07 |
|
||
|
AJAX (COMET & HTTP Streaming)
|
|||
|---|---|---|---|
|
#18+
Ну да, вопрос с разделенными ajax-процессами в работе с Comet, пожалуй, очень важный. Настоятельно рекомендуется использовать не более двух разделенных аджакс-запросов для кроссбраузерности. Но, насколько понимаю, можно и ограничиться этими двумя - один отдается полностью Comet (без этого никак), а второй - на динамику страницы. Хотя при таком подходе при динамической отправке файла может случиться "опс" ... Да и то, что javascript - однопотоковый язык, не играет на руку. Поэтому использование Comet (и в частности Continuations) рекомендуется использовать с флешем на странице - не возникнет вопроса разделения потоков или процессов выполнения. А флеш достаточно нормально взаимойдействует со страницей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2008, 20:42 |
|
||
|
AJAX (COMET & HTTP Streaming)
|
|||
|---|---|---|---|
|
#18+
авторможно и ограничиться этими двумя - один отдается полностью Comet (без этого никак), а второй - на динамику страницы. Хотя при таком подходе при динамической отправке файла может случиться "опс"Т.е. чтобы был кроссбраузерный нужно использовать не более 2х одновременных асинхронных запросов? А почему при загрузке файлов будет проблема? Файлы и параметры ведь передаются в одном потоке или нет? В принципе этот случай тоже можно обработать, остановить COMET - слушатель, выполнить отправку формы и возобновить прослушивание. Но это усложнит код, хотелось бы поточнее узнать стоит ли это делать или и так будет нормально работать? Посмотрел в интернете что известно по COMETy, его не очень-то жалуют, он должен постоянно держать активным сессию на сервере и потреблять ресурсы :). Но для меня это как-раз не проблема, у меня сессии всеравно всегда активны и в памяти. Вобщем, слабовато его поддерживают известные фреймворки, стати почему? Это-же будет Killer App. Возможно, потому-что эта модель не очень хорошо поддерживается серверами. Пересмотрел Dojo Toolkit, год назад он выглядел довольно слабо, сейчас глянул - демка супер! И API вроде получше и попроще чем YUI. И все что требуется он тоже умеет, к тому-же там уже есть наработки по COMET. Попробую его использовать :). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2008, 01:57 |
|
||
|
AJAX (COMET & HTTP Streaming)
|
|||
|---|---|---|---|
|
#18+
C javascript я comet не использовал - как-то не приходилось такой проект делать, хотя он и на носу - веб-десктопное приложение, когда надо удерживать целостность данных не только на уровне базы (orm), но и в пользовательском интерфейсе: запрет на одновременный доступ к данным. Плюс - информативность клиентов он-лайн. Другого варианта, кроме comet, не вижу. Попробовать попробую, но не уверен в эффективности, возможно, прийдется как раньше - через флеш. Насчет двух одновременных ajax-потоках читал на сановских страницах, для себя считаю аксиомой. Хотя последнее время использую активно jQuery и нигде ни упоминания, ни пожеланий по этому поводу не встречал, но проверял - раздельные процессы работают (два). Насчет передачи файлов я, конечно, погорячился - забыл, что если идет динамическая передача файла, то это возможно только через фреймы, следовательно, ajax тут не при чем. Так что можно нормально разделить задачи: один поток на comet, второй - динамика страницы, по возможности, цепочкой. Comet в том и приятен, что по задумке это ответ, инициированный сервером, поэтому останавливать его противоестественно. Хотя серваку все равно: пришел запрос - ждем события, не пришел - не работаем. Что до сессии, то понятно, что сессию он держит - это нормально, ведь фактически comet - чуть ли не единственная альтернатива сокетам, только последние ограничены по количеству и более затратны, хотя принцип их более логичен и использование правильное. А вот что до потребления ресурсов - не скажу, чего-то не вижу где их много используется - синглтон и один тред на бесконечный цикл - слушатель. Немного аккуратности - и даже "мусора" может не быть. Ну, а насчет фреймворков - не очень представляю, зачем нужны надстройки и юзабилити, когда данный процесс на клиенте осуществляется парой-тройкой строк рекурсивной отсылки запроса (задержка-то не нужна) и обработкой ответа. В общем, не вижу существенных вопросов относительно технологии. В этом разрезе меня больше интересует определение присутствия сессии реал-тайм, чего так нормально до сих пор не сделал. А очень хочется для себя эту тему закрыть раз и навсегда. Но это вопрос не данной части форума. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2008, 02:35 |
|
||
|
AJAX (COMET & HTTP Streaming)
|
|||
|---|---|---|---|
|
#18+
[quote]Ну, а насчет фреймворков - не очень представляю, зачем нужны надстройки и юзабилити, когда данный процесс на клиенте осуществляется парой-тройкой строк рекурсивной отсылки запроса (задержка-то не нужна) и обработкой ответа.[/quote]Потомучто тогда можно будет написать Код: 1. 2. 3. И забыть про HTML и JS, и вообще про то что клиетн на Web. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2008, 05:29 |
|
||
|
AJAX (COMET & HTTP Streaming)
|
|||
|---|---|---|---|
|
#18+
Блин, что-то у меня не получается форматирование вставлять, сори. Я через GPRS и отключил JS . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2008, 05:29 |
|
||
|
AJAX (COMET & HTTP Streaming)
|
|||
|---|---|---|---|
|
#18+
авторЧто до сессии, то понятно, что сессию он держит - это нормально, ведь фактически comet - чуть ли не единственная альтернатива сокетам, только последние ограничены по количеству и более затратны, хотя принцип их более логичен и использование правильное. А вот что до потребления ресурсов - не скажу, чего-то не вижу где их много используется - синглтон и один тред на бесконечный цикл - слушатель. Немного аккуратности - и даже "мусора" может не быть.Да, верно, я не подумал. Вот кстати нашел описание как это сделать, если интересно http://habrahabr.ru/blogs/webdev/41223/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2008, 05:40 |
|
||
|
AJAX (COMET & HTTP Streaming)
|
|||
|---|---|---|---|
|
#18+
Да, встречал. Правда, ПэХаПэ меня не очень интересует - сервер у меня на Java крутится (кстати, сам Comet и разработали изначально на этой платформе). И еще маленькое замечание: глубоко в Comet я не влазил, но то, что я использовал, и то, о чем ты говоришь (и на ссылке) - это составляющая Comet - Continuations. Кстати, использовал его в казино - достаточно удобно, причем делал двухуровневым - в зависимости от игры: некоторые сообщения сервера получали все пользователи, а некоторые - только определенная группа. Для этого делал еще один синглтон с коллекцией коллекций идентефикаторов (набор групп игроков). Вот, правда, чего не смог побороть - сделать 2 параллельно работающих процесса Comet/Continuations - очень хотелось разделить изначально игры. Но не получилось. Возможно, вскоре в связи с поднятием экспириенса разберусь, но полтора года назад не смог ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2008, 12:16 |
|
||
|
AJAX (COMET & HTTP Streaming)
|
|||
|---|---|---|---|
|
#18+
Ура! Работает! :) Один вопрос, а как можно в DOM создать элемент из HTML? А то мне приходится слишком уж сложно это делать, может можно упростить? авторvar wrapper = window.document.createElement('div'); wrapper.innerHTML = item.html var new_element = nodeChild(wrapper) авторfunction nodeChild(parent) { for (var j = 0; j < parent.childNodes.length; j++) { if (parent.childNodes[j].nodeType == 1) { return parent.childNodes[j]; } } } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2008, 02:32 |
|
||
|
AJAX (COMET & HTTP Streaming)
|
|||
|---|---|---|---|
|
#18+
авторИ еще маленькое замечание: глубоко в Comet я не влазил, но то, что я использовал, и то, о чем ты говоришь (и на ссылке) - это составляющая Comet - Continuations. Кстати, использовал его в казино - достаточно удобно, причем делал двухуровневым - в зависимости от игры: некоторые сообщения сервера получали все пользователи, а некоторые - только определенная группа. Для этого делал еще один синглтон с коллекцией коллекций идентефикаторов (набор групп игроков). Вот, правда, чего не смог побороть - сделать 2 параллельно работающих процесса Comet/Continuations - очень хотелось разделить изначально игры. Но не получилось. Возможно, вскоре в связи с поднятием экспириенса разберусь, но полтора года назад не смог ... Не совсем понял как COMET связан с Continuation. Это веть разные вещи? Континуейшен - возможность заморозить исполнение программы и затем вернуться на прерванный участок. Будет время посмотри JBoss Seam, особенно модель управления жизненным циклом компонентов (IоC), он очень здорово упрощает создание такого рода приложений, с сохранением состояния. И он там гораздо круче чем просто IoC, так сказать - развитие идеи IoC. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2008, 02:40 |
|
||
|
|

start [/forum/topic.php?fid=22&fpage=311&tid=1455539]: |
0ms |
get settings: |
12ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
39ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
33ms |
get tp. blocked users: |
1ms |
| others: | 215ms |
| total: | 324ms |

| 0 / 0 |
