powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / AJAX (COMET & HTTP Streaming)
12 сообщений из 12, страница 1 из 1
AJAX (COMET & HTTP Streaming)
    #35661554
private
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подскажите пожалуйста, возможно ли 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 фреймворка и наличие в нем различных эффектов не важна, напрямую с ним разработчики работать не будут, он будет использоваться только исключительно для вышеперечисленных задач.
...
Рейтинг: 0 / 0
AJAX (COMET & HTTP Streaming)
    #35661569
private
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Забыл уточнить, конечно-же необязательно делать абсолютно все эти вещи через COMET, через комет хотелось бы только:
- События инициированные сервером.

Но дело в том, что самостоятельно добавить это к YUI я не смогу, а использовать еще один фреймворк - будет много весить и они могут мешать друг-другу.
...
Рейтинг: 0 / 0
AJAX (COMET & HTTP Streaming)
    #35661672
private
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Много думал ... А возможно это сделать таким образом?

Оставить все как есть, но добавить в JS вместо таймера постоянно работающее JS соединение с сервером. Т.е. оно работает постоянно, параллельно с основным AJAX процессингом и никак на него не влияет.
А когда сервер хочет послать событие клиенту он посылает обновление, оно производится независимо от основного AJAX процессинга, JS обновляет DOM и слушает дальше.

Вопросы тут - позволяет ли JS параллельно запускать несколько процессов, синхронизация обновления DOM с основным процессом и возможно-ли одновременно устанавливать несколько соединений с сервером?
Хотя, вопрос синхронизации можно в принципе решать на сервере.

П.С.
Я правильно понимаю, что когда мы передаем с параметрами файлы на сервер, все это передается в одном соединении, и они просто разделены метками в одном и том-же потоке данных?
А веб-сервер уже парсит этот поток и представляет его приложению как хеш из обычных параметров и группы сохранненных на диске файлов?
...
Рейтинг: 0 / 0
AJAX (COMET & HTTP Streaming)
    #35661719
IDVsbruck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну да, вопрос с разделенными ajax-процессами в работе с Comet, пожалуй, очень важный. Настоятельно рекомендуется использовать не более двух разделенных аджакс-запросов для кроссбраузерности. Но, насколько понимаю, можно и ограничиться этими двумя - один отдается полностью Comet (без этого никак), а второй - на динамику страницы. Хотя при таком подходе при динамической отправке файла может случиться "опс" ... Да и то, что javascript - однопотоковый язык, не играет на руку.

Поэтому использование Comet (и в частности Continuations) рекомендуется использовать с флешем на странице - не возникнет вопроса разделения потоков или процессов выполнения. А флеш достаточно нормально взаимойдействует со страницей.
...
Рейтинг: 0 / 0
AJAX (COMET & HTTP Streaming)
    #35662054
private
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторможно и ограничиться этими двумя - один отдается полностью Comet (без этого никак), а второй - на динамику страницы. Хотя при таком подходе при динамической отправке файла может случиться "опс"Т.е. чтобы был кроссбраузерный нужно использовать не более 2х одновременных асинхронных запросов?
А почему при загрузке файлов будет проблема? Файлы и параметры ведь передаются в одном потоке или нет?

В принципе этот случай тоже можно обработать, остановить COMET - слушатель, выполнить отправку формы и возобновить прослушивание. Но это усложнит код, хотелось бы поточнее узнать стоит ли это делать или и так будет нормально работать?

Посмотрел в интернете что известно по COMETy, его не очень-то жалуют, он должен постоянно держать активным сессию на сервере и потреблять ресурсы :). Но для меня это как-раз не проблема, у меня сессии всеравно всегда активны и в памяти.
Вобщем, слабовато его поддерживают известные фреймворки, стати почему? Это-же будет Killer App.
Возможно, потому-что эта модель не очень хорошо поддерживается серверами.

Пересмотрел Dojo Toolkit, год назад он выглядел довольно слабо, сейчас глянул - демка супер! И API вроде получше и попроще чем YUI. И все что требуется он тоже умеет, к тому-же там уже есть наработки по COMET.
Попробую его использовать :).
...
Рейтинг: 0 / 0
AJAX (COMET & HTTP Streaming)
    #35662072
IDVsbruck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
C javascript я comet не использовал - как-то не приходилось такой проект делать, хотя он и на носу - веб-десктопное приложение, когда надо удерживать целостность данных не только на уровне базы (orm), но и в пользовательском интерфейсе: запрет на одновременный доступ к данным. Плюс - информативность клиентов он-лайн. Другого варианта, кроме comet, не вижу. Попробовать попробую, но не уверен в эффективности, возможно, прийдется как раньше - через флеш.

Насчет двух одновременных ajax-потоках читал на сановских страницах, для себя считаю аксиомой. Хотя последнее время использую активно jQuery и нигде ни упоминания, ни пожеланий по этому поводу не встречал, но проверял - раздельные процессы работают (два).

Насчет передачи файлов я, конечно, погорячился - забыл, что если идет динамическая передача файла, то это возможно только через фреймы, следовательно, ajax тут не при чем. Так что можно нормально разделить задачи: один поток на comet, второй - динамика страницы, по возможности, цепочкой.

Comet в том и приятен, что по задумке это ответ, инициированный сервером, поэтому останавливать его противоестественно. Хотя серваку все равно: пришел запрос - ждем события, не пришел - не работаем.

Что до сессии, то понятно, что сессию он держит - это нормально, ведь фактически comet - чуть ли не единственная альтернатива сокетам, только последние ограничены по количеству и более затратны, хотя принцип их более логичен и использование правильное. А вот что до потребления ресурсов - не скажу, чего-то не вижу где их много используется - синглтон и один тред на бесконечный цикл - слушатель. Немного аккуратности - и даже "мусора" может не быть.

Ну, а насчет фреймворков - не очень представляю, зачем нужны надстройки и юзабилити, когда данный процесс на клиенте осуществляется парой-тройкой строк рекурсивной отсылки запроса (задержка-то не нужна) и обработкой ответа.

В общем, не вижу существенных вопросов относительно технологии.
В этом разрезе меня больше интересует определение присутствия сессии реал-тайм, чего так нормально до сих пор не сделал. А очень хочется для себя эту тему закрыть раз и навсегда. Но это вопрос не данной части форума.
...
Рейтинг: 0 / 0
AJAX (COMET & HTTP Streaming)
    #35662108
private
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quote]Ну, а насчет фреймворков - не очень представляю, зачем нужны надстройки и юзабилити, когда данный процесс на клиенте осуществляется парой-тройкой строк рекурсивной отсылки запроса (задержка-то не нужна) и обработкой ответа.[/quote]Потомучто тогда можно будет написать
Код:
1.
2.
3.
Button.new "Do it!" do
    worker.do_something
end

И забыть про HTML и JS, и вообще про то что клиетн на Web.
...
Рейтинг: 0 / 0
AJAX (COMET & HTTP Streaming)
    #35662110
private
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блин, что-то у меня не получается форматирование вставлять, сори. Я через GPRS и отключил JS .
...
Рейтинг: 0 / 0
AJAX (COMET & HTTP Streaming)
    #35662113
private
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторЧто до сессии, то понятно, что сессию он держит - это нормально, ведь фактически comet - чуть ли не единственная альтернатива сокетам, только последние ограничены по количеству и более затратны, хотя принцип их более логичен и использование правильное. А вот что до потребления ресурсов - не скажу, чего-то не вижу где их много используется - синглтон и один тред на бесконечный цикл - слушатель. Немного аккуратности - и даже "мусора" может не быть.Да, верно, я не подумал. Вот кстати нашел описание как это сделать, если интересно http://habrahabr.ru/blogs/webdev/41223/
...
Рейтинг: 0 / 0
AJAX (COMET & HTTP Streaming)
    #35662905
IDVsbruck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, встречал. Правда, ПэХаПэ меня не очень интересует - сервер у меня на Java крутится (кстати, сам Comet и разработали изначально на этой платформе).
И еще маленькое замечание: глубоко в Comet я не влазил, но то, что я использовал, и то, о чем ты говоришь (и на ссылке) - это составляющая Comet - Continuations. Кстати, использовал его в казино - достаточно удобно, причем делал двухуровневым - в зависимости от игры: некоторые сообщения сервера получали все пользователи, а некоторые - только определенная группа. Для этого делал еще один синглтон с коллекцией коллекций идентефикаторов (набор групп игроков).

Вот, правда, чего не смог побороть - сделать 2 параллельно работающих процесса Comet/Continuations - очень хотелось разделить изначально игры. Но не получилось. Возможно, вскоре в связи с поднятием экспириенса разберусь, но полтора года назад не смог ...
...
Рейтинг: 0 / 0
AJAX (COMET & HTTP Streaming)
    #35670061
private
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ура! Работает! :)

Один вопрос, а как можно в 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];
}
}
}
...
Рейтинг: 0 / 0
AJAX (COMET & HTTP Streaming)
    #35670070
private
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторИ еще маленькое замечание: глубоко в Comet я не влазил, но то, что я использовал, и то, о чем ты говоришь (и на ссылке) - это составляющая Comet - Continuations. Кстати, использовал его в казино - достаточно удобно, причем делал двухуровневым - в зависимости от игры: некоторые сообщения сервера получали все пользователи, а некоторые - только определенная группа. Для этого делал еще один синглтон с коллекцией коллекций идентефикаторов (набор групп игроков).

Вот, правда, чего не смог побороть - сделать 2 параллельно работающих процесса Comet/Continuations - очень хотелось разделить изначально игры. Но не получилось. Возможно, вскоре в связи с поднятием экспириенса разберусь, но полтора года назад не смог ...
Не совсем понял как COMET связан с Continuation. Это веть разные вещи? Континуейшен - возможность заморозить исполнение программы и затем вернуться на прерванный участок.
Будет время посмотри JBoss Seam, особенно модель управления жизненным циклом компонентов (IоC), он очень здорово упрощает создание такого рода приложений, с сохранением состояния. И он там гораздо круче чем просто IoC, так сказать - развитие идеи IoC. :)
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / AJAX (COMET & HTTP Streaming)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]