Несколько XMLHttpRequest одновременно
От: sergey123_1  
Дата: 06.04.11 16:16
Оценка:
Столкнулся с необходимостью делать несколько XHR с одной страницы одновременно. Дело в том, что каждый ответ приходит через 3-10 секунд(но не потому что сервер плохой, а потому что server-side скрипты ходят на оборудование, которое медленно выдаёт результат).
Итак, проблема состоит в том, что в пределах одного браузера(или вкладки браузера) нельзя создать несколько http-сессий к одному домену, поэтому XHR-запросы встают в очередь и как следствие, выполняются последоватьно. Эту проблему частично удалось решить тем, что создал несколько субдоменов вида ajax0.site.com, ajax1.site.com и т.д., в основную страницу вставляю несколько iframe-ов и запускаю XHR-запросы из iframe-ов (если делать без iframe-ов, а сразу обращать к ajax*.site.com, то в поле status вместо 200 появляется 0, хотя сам http-запрос делается). Однако теперь возникла проблема, что js-код в iframe-ах не может обратиться к объекту parent (по соображениям безопасности(firefox в консоле ошибок пишет Permission denied)) и не может записать результат выполнения запроса в соответсвующие элементы основной страницы. Была идея, вставлять iframe-ы прямо в таблицы, но такой вариант плох тем, что данные, которые вернулись в xhr-запросе, вообще говоря, нужно раскидывать по разным частям основной страницы.

Поэтому хочу спросить, если у кого-нибудь идеи, каким образом можно выполнять несколько XHR-запросов к одному серверу одновременно?
xmlhttprequest subdomain iframe
Re: Несколько XMLHttpRequest одновременно
От: Lloyd Россия  
Дата: 06.04.11 17:28
Оценка: 2 (1)
Здравствуйте, sergey123_1, Вы писали:

_>Столкнулся с необходимостью делать несколько XHR с одной страницы одновременно. Дело в том, что каждый ответ приходит через 3-10 секунд(но не потому что сервер плохой, а потому что server-side скрипты ходят на оборудование, которое медленно выдаёт результат).


Сделайте так, чтобы server-side скрипт запускал отдельный поток на обработку задачи и сразу возвращал управление браузеру. Когда задача завершится, сохраните её статус, например в базу. После того, как все задания были запущены на сервере, клиент должен начать периодически опрашивать сервер о статусе задач.
Re[2]: Несколько XMLHttpRequest одновременно
От: sergey123_1  
Дата: 06.04.11 20:14
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Сделайте так, чтобы server-side скрипт запускал отдельный поток на обработку задачи и сразу возвращал управление браузеру. Когда задача завершится, сохраните её статус, например в базу. После того, как все задания были запущены на сервере, клиент должен начать периодически опрашивать сервер о статусе задач.


Спасибо. Если ничего более простого не найдётся, то так и придётся делать. У Вас случайно нет заготовки функции sleep для js?(или всё равно придётся извращаться с setTimeout и рекурсией?(как здесь))
В этом решении ещё нужно запускать дополнительный job в БД, который будет чистить статусы по таймауту(если оператор закрыл окно браузера), а чем больше костылей я сделаю, тем сложнее будет потом разбираться в проблемах, а тратить время на траблшутинг "веб-сервера" нет никакого желания(есть дела поинтереснее).
Re[3]: Несколько XMLHttpRequest одновременно
От: Lloyd Россия  
Дата: 06.04.11 20:23
Оценка:
Здравствуйте, sergey123_1, Вы писали:

L>>Сделайте так, чтобы server-side скрипт запускал отдельный поток на обработку задачи и сразу возвращал управление браузеру. Когда задача завершится, сохраните её статус, например в базу. После того, как все задания были запущены на сервере, клиент должен начать периодически опрашивать сервер о статусе задач.


_>Спасибо. Если ничего более простого не найдётся, то так и придётся делать. У Вас случайно нет заготовки функции sleep для js?(или всё равно придётся извращаться с setTimeout и рекурсией?(как здесь))


Не совсем понимаю, какое это имеет отношение к первому вопросу.

_>В этом решении ещё нужно запускать дополнительный job в БД, который будет чистить статусы по таймауту(если оператор закрыл окно браузера), а чем больше костылей я сделаю, тем сложнее будет потом разбираться в проблемах, а тратить время на траблшутинг "веб-сервера" нет никакого желания(есть дела поинтереснее).


Погуглите еще по слову Comet, может под вашу платформу будет что стоящее.
Re[4]: Несколько XMLHttpRequest одновременно
От: sergey123_1  
Дата: 07.04.11 05:02
Оценка:
Здравствуйте, Lloyd, Вы писали:

_>>Спасибо. Если ничего более простого не найдётся, то так и придётся делать. У Вас случайно нет заготовки функции sleep для js?(или всё равно придётся извращаться с setTimeout и рекурсией?(как здесь))


L>Не совсем понимаю, какое это имеет отношение к первому вопросу.


Чтобы периодически опрашивать сервер о статусе задач, нужно сколько-то ждать между опросами, например 1 секунду, функции sleep в чистом виде в js нет, поэтому и решил спросить, может быть у Вас есть такая заготовка.
Re[5]: Несколько XMLHttpRequest одновременно
От: andrey82  
Дата: 07.04.11 05:35
Оценка:
Здравствуйте, sergey123_1, Вы писали:

_>Чтобы периодически опрашивать сервер о статусе задач, нужно сколько-то ждать между опросами, например 1 секунду, функции sleep в чистом виде в js нет, поэтому и решил спросить, может быть у Вас есть такая заготовка.


А что браузер будет делать при исполнении этого sleep? Уходить в ступор?
В обработчике таймера ("onTick()") просто вызывается setTimeout("onTick()", interval) и все...
settimeout
Re[5]: Несколько XMLHttpRequest одновременно
От: Lloyd Россия  
Дата: 07.04.11 05:48
Оценка:
Здравствуйте, sergey123_1, Вы писали:

L>>Не совсем понимаю, какое это имеет отношение к первому вопросу.


_>Чтобы периодически опрашивать сервер о статусе задач, нужно сколько-то ждать между опросами, например 1 секунду, функции sleep в чистом виде в js нет,


Ее и не может быть. Иначе получил бы подвисший UI, т.к. js выполняется в одном потоке.

_>поэтому и решил спросить, может быть у Вас есть такая заготовка.


setInterval/setTimeout
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.