Почему вызов ajax ждет, пока другие закончат, как запустить определенный вызов с наивысшим приоритетом?

Вот проблема:

Многие вызовы ajax продолжаются, поэтому я нажимаю кнопку, чтобы сделать билет, который должен быть выполнен немедленно, вместо этого он остается там, пока все остальные до него не будут завершены! это почему?

Как я могу заставить его работать с наивысшим приоритетом?

Изображение прикреплено для лучшего понимания:

введите здесь описание изображения

Борюсь с этим уже 2 дня, так что очень нужна помощь в этом!


person confusedMind    schedule 25.07.2013    source источник
comment
Разные браузеры имеют разное количество подключений, доступных для ajax-запросов к одному имени хоста. browserscope.org/?category=network   -  person Sethcran    schedule 26.07.2013
comment
@Sethcran о, и я запускаю 12, так что должно быть до тех пор, пока не останется 5, так что теперь я вижу, что это 6, запустив билет. Но разве нет способа расставить приоритеты? или приостановить и повторить вызовы?   -  person confusedMind    schedule 26.07.2013
comment
stackoverflow.com/questions/8126777 / может показать вам, как добавить приоритет, если вы хотите, но вам все равно придется ждать завершения запроса, прежде чем сработает ваш следующий наивысший приоритет. stackoverflow.com/questions/446594/ показывает как вы можете прервать текущий запрос.   -  person Sethcran    schedule 26.07.2013


Ответы (1)


Я бы посмотрел, что действительно нужно. Вам действительно нужно 12 одновременных вызовов ajax на пользователя/сеанс? У вас возникнут серьезные проблемы с сервером при обработке такого количества запросов. Я вижу много запросов на один и тот же URI; имеет ли смысл ждать, пока один из этих запросов не будет завершен, прежде чем обрабатывать следующий? Есть ли способ «объединить» ваши запросы в один? или меньше? Болтливые интерфейсы, как правило, приводят к проблемам в будущем.

Вы можете вести подсчет количества одновременных запросов, которые у вас есть, и никогда не позволять им превышать пороговое значение, ставя в очередь запросы, если только один из них не является «высоким приоритетом».

Но серьезно подумайте о том, чтобы делать так много запросов за раз.

Обновить

Поскольку вы отправляете запросы в несколько внешних местоположений на основе одного действия использования. Пусть одно действие пользователя сделает один запрос к вашему веб-серверу. Затем ваш веб-сервер делает запросы от имени пользователя, собирает все результаты вместе и возвращает их пользователю в одном ответе. Это также поможет вам поддерживать внешние связи, а вашим пользователям будет унифицирована работа с вашим веб-сайтом.

Обновление 2

Если вы объедините свои запросы из шести в один, ваш веб-сервер может перенаправить эти запросы в отдельные потоки, сделав их асинхронными, как описано здесь. Пользователь не увидит никаких результатов, пока все не будут завершены, что может показаться медленным. Но умножьте это на 1000 одновременных пользователей, и это будет быстрее.

person Jay    schedule 25.07.2013
comment
6 из них возвращают данные с веб-сайтов 6 авиакомпаний (6 для вылетающих рейсов и 6 для обратных рейсов), и, таким образом, это быстро, что вы предлагаете, как мне решить эту проблему таким образом, чтобы она была быстрой и менее загруженной? - person confusedMind; 26.07.2013
comment
@confusedMind Смотрите обновления. - person Jay; 26.07.2013
comment
Не могли бы вы объяснить. Затем ваш веб-сервер будет делать запросы от имени пользователя, объединять результаты вместе и возвращать их в один ответ пользователю. Ссылка на статью будет высоко оценена. - person confusedMind; 26.07.2013
comment
Глядя на ваш скриншот, вы, возможно, уже делаете это. По сути, ваш веб-сайт действует как прокси, поэтому веб-пользователь не переходит напрямую на веб-сайты ваших внешних авиакомпаний. Мое предложение здесь состояло бы в том, чтобы объединить запросы, чтобы все 6 были в одном. Сейчас это может показаться медленнее, но когда тысячи пользователей делают эти запросы, это убьет ваш сервер. - person Jay; 26.07.2013
comment
но в таком случае результат будет один за другим :| сделает поиск медленным, не так ли? - person confusedMind; 26.07.2013
comment
Итак, теперь я думаю о том, чтобы объединить все функции в 1, вызвать, но после того, как каждая функция обновит страницу, так что мне для этого сделать? Как обновить литерал или div с результатами во время функции/ - person confusedMind; 26.07.2013
comment
Другой вариант, если вы асинхронизируете вызовы, состоит в том, чтобы немедленно вернуть ответ, а затем опросить сервер для обновлений. Каждый опрос должен быть отложен, и это уменьшит количество одновременных запросов, которые у вас есть. - А вот как обновить, это другой вопрос. Я был бы рад пообщаться с вами, если вы прыгнете в комнату c # - person Jay; 26.07.2013
comment
давайте продолжим это обсуждение в чате - person confusedMind; 26.07.2013
comment
Я решил это, используя ваше предложение :) Сейчас я делаю один вызов ajax, и он использует curl для выполнения параллельного запроса. Получить запрос занимает максимум 3-8 секунд, идеально подходит для того, что мне нужно. Спасибо - person confusedMind; 28.07.2013