[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Про работу ajax запросов
program90
Здраствуйте,
подскажите, что происходит, если одно ajax-сообщение приходит быстрее чем успевают придти ответ на предыдущее? Объект XMLHttpRequest создается один.
Если с помощью Network Monitor увидеть траффик браузера Mozilla, то видно, что на оба приходят ответы. Но Mozilla в консоли почему-то пишет, что ответ на первый запрос не получен (aborted).
А в Internet Explorer сразу после первого запроса tcp-соединение сбрасывается и открывается второе, на другом порте. И в результате приходит ответ только на последний запрос.

И еще вопрос:
Как лучше сделать: при каждой новой проверке появления новых сообщений в чате создавать новый объект XMLHttpRequest (тогда вроде бы каждый запрос будет идти с нового порта) или создать один объект, и каждый раз через него соединятся (отправлять сообщения в чат и проверять обновления каждую секунду)?

Заранее спасибо



Спустя 3 часа, 54 минуты, 26 секунд (27.12.2010 - 08:36) Michael написал(а):
Цитата (program90 @ 27.12.2010 - 03:41)
Здраствуйте,
подскажите, что происходит, если одно ajax-сообщение приходит быстрее чем успевают придти ответ на предыдущее?

а что тут может происходить? Обрабатываются они ... Это в порядке вещей, асинхронные запросы называются.

Спустя 8 часов, 42 минуты, 35 секунд (27.12.2010 - 17:18) program90 написал(а):
Michael
А почему один сбрасывается кода приходит другой? по идее они должны встать в очередь.

Спустя 34 минуты, 22 секунды (27.12.2010 - 17:53) program90 написал(а):
Если запрос посылается каждые 3 секунды, то он работает. А если его отправлять каждую секунду, то почему-то результат возвращается редко, в основном, возвращается пустая страница.

Спустя 15 часов, 7 минут, 16 секунд (28.12.2010 - 09:00) ApuktaChehov написал(а):
У меня такое происходит, когда отправляются абсолютно одинаковые запросы очень часто. Чаще чем раз в секунду.

Спустя 3 дня, 10 часов, 51 минута, 53 секунды (1.01.2011 - 19:52) program90 написал(а):
ApuktaChehov
А что можно сделать, чтобы работало нормально?

Спустя 1 час, 52 минуты, 18 секунд (1.01.2011 - 21:44) ApuktaChehov написал(а):
program90
Даже и не думал над этим вопросом. Но с логической точки зрения, не понимаю, для чего посылать одинаковые запросы так часто.

Спустя 8 часов, 15 минут, 8 секунд (2.01.2011 - 05:59) program90 написал(а):
ApuktaChehov
я делаю обновление окна чата новыми сообщениями. setInterval("ajaxConnection('/chat/general_window.php', 'general_window', '', 'GET');", 1000);

Спустя 7 часов, 2 минуты, 34 секунды (2.01.2011 - 13:02) ApuktaChehov написал(а):
program90 3 секунды - оптимальный вариант. Если больше юзер соскучится, если меньше сервер нагнется.

Спустя 45 минут, 59 секунд (2.01.2011 - 13:48) sergeiss написал(а):
Цитата (program90 @ 2.01.2011 - 06:59)
я делаю обновление окна чата новыми сообщениями

И что с того? Ты сначала получи ответ на предыдущий запрос, а потом следующий отправляй. Зачем их "лепить" постоянно? Это же называется "флуд" - когда говорят и не слушают smile.gif

Спустя 12 часов, 48 минут, 53 секунды (3.01.2011 - 02:37) program90 написал(а):
sergeiss
Т.е. не пользоваться функцией setInterval, а в функции-обработчике события onreadystatechange делать новый ajax-вызов? Как бы рекурсивный вызов - одна функция вызывают другую, а та через событие(ajax-ответ) "вызывает" первую?

Спустя 42 минуты, 9 секунд (3.01.2011 - 03:19) sergeiss написал(а):
Цитата (program90 @ 3.01.2011 - 03:37)
Т.е. не пользоваться функцией setInterval, а в функции-обработчике события onreadystatechange делать новый ajax-вызов? Как бы рекурсивный вызов - одна функция вызывают другую, а та через событие(ajax-ответ) "вызывает" первую?

Типа такого. Потому что даже по логике работы чата смысла нету посылать запросы с "тупой" периодичностью.
Допустим, у тебя нету новых сообщений 10 секунд. Тогда твой запрос может просто ждать на сервере, не выдавая ничего назад. Нет ничего в течение (например) 20 секунд - дай пустой ответ. И пусть клиент выдаст новый запрос. А если есть новые ответы, например, через 10 секунд после запроса - отдай их клиенту и пусть он только потом выдаст следующий запрос. То есть, короче говоря, ответ уходит с сервера либо через какое-то время (по истечении таймера), либо при наличии данных.

По-моему, так существенно более логично получается smile.gif

Спустя 1 час, 5 минут, 36 секунд (3.01.2011 - 04:24) waldicom написал(а):
program90, если воспользуешься последним советом, то будь готов к тому, что сервер твой помрет мучительной смертью при более-менне большом количестве чатующихся... чатеров...эмм... флудеров, во smile.gif

Спустя 6 минут, 59 секунд (3.01.2011 - 04:31) sergeiss написал(а):
Цитата (waldicom @ 3.01.2011 - 05:24)
program90, если воспользуешься последним советом, то будь готов к тому, что сервер твой помрет мучительной смертью при более-менне большом количестве чатующихся... чатеров...эмм... флудеров, во

Ты хочешь сказать, что если он будет "тупо" слать запросы от каждого клиента раз в секунду, то загрузка сервера будет меньше???

Спустя 5 часов, 44 минуты, 11 секунд (3.01.2011 - 10:16) Michael написал(а):
sergeiss, наверное все таки про то что не стоит на сервере sleep- ом пользоваться. А запускать на клиенте - да, так как ты и сказал. Я пример помню раньше приводил.

Спустя 3 часа, 4 минуты, 45 секунд (3.01.2011 - 13:20) program90 написал(а):
А объект XMLHttpRequest можно использовать для нескольких запросов (идущих по очереди). Или для каждого запроса нужно создавать новый объект? И уничтожается ли он после того как клиент получил ответ.

Спустя 3 часа, 14 минут, 42 секунды (3.01.2011 - 16:35) Michael написал(а):
один используется

Спустя 18 часов, 44 минуты, 26 секунд (4.01.2011 - 11:20) vergin написал(а):
мне кажется, что в твоем случае было бы логично сделать стек, так называемую очередь, и помещать в нее запросы, а извлекать из очереди запрос только тогда, когда пришел ответ от предидущего

Спустя 4 минуты, 7 секунд (4.01.2011 - 11:24) Michael написал(а):
vergin, а зачем делать стек если новый запрос (один) все равно будет посылаться после прихода предыдущего? Там его и можно сгенерировать.

Спустя 10 минут, 2 секунды (4.01.2011 - 11:34) vergin написал(а):
если ajax-запрос повесить на какое-то событие, то запрос будет отправляться серверу каждый раз, при срабатывании события, не дожидаясь ответа от предидущего запроса, запросы будут накладываться. В случае с чатом, например, это отправка сообщения, если повесить все на 1 xmlHttpRequest и отправить кучу сообщений, то обработается только последний запрос. Для того чтоб обработались все запросы, мне кажется и нужен стек. Или я ошибаюсь?

Спустя 4 минуты, 54 секунды (4.01.2011 - 11:39) Michael написал(а):
асинхронные запросы - отправятся все, а не последний.

Спустя 7 минут, 14 секунд (4.01.2011 - 11:46) Michael написал(а):
на jquery обычно об этом не думаешь. Да с отправкой вручную - как ты сказал

Спустя 5 минут, 46 секунд (4.01.2011 - 11:52) vergin написал(а):
я пока работал с AJAX только на голом JS

Спустя 2 минуты, 12 секунд (4.01.2011 - 11:54) Michael написал(а):
Если каждый раз создавать свой запрос - то все как я сначала сказал. пример

Я наоборот давно на чистом js аякс не делал

Спустя 1 день, 3 часа, 39 минут, 51 секунда (5.01.2011 - 15:34) program90 написал(а):
А почему если один запрос обрывается другим, то статусы ajax запроса меняются. Хоть если второй запрос выполнился успешно. И последующие запросы не обрабатываются обработчиком.
Что происходит при abort() ? Что меняется в объекте XMLHttpRequest?
Спасибо
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.