У меня есть ситуация, когда мой сайт должен быстро получать данные с моего сервера через AJAX.XMLHttpRequest, используемый для поиска более быстрого сервера
Мой сайт работает на порту 80, обслуживая обычные веб-страницы. Обычно я запускаю свой сервер AJAX на порт 8001 (я использую JSONP, и это отлично работает). Это работает для большинства пользователей. Тем не менее, некоторые пользователи блокируются из высоких портов своими локальными брандмауэрами.
Для того, чтобы позволить людям, которые имеют исходящие соединения на порт 8001 заблокирован, чтобы использовать мой сайт, я хочу упасть обратно на порт 80, в случае, если пользователь не может получить ответ на порт 8001.
Причина Я не использую порт 80 все время, что иногда у людей есть «умные» антивирусные шлюзы или другие брандмауэры на уровне приложений, которые перехватывают исходящие соединения на порту 80. Они добавляют пару сотен миллисекунд к моему времени в оба конца. Мой сервис AJAX должен минимизировать время отклика в оба конца.
Я использую jQuery, чтобы упростить работу с XMLHttpRequest. Я использую вариант JSONP, и эта часть работает - вытягивание запросов AJAX с другого IP-адреса или порта не является проблемой сама по себе.
Идея, которую я имею, заключается в том, что, когда страница загружается первой, она срабатывает при 2 вызовах getJSON. Один на порт 8001, а другой - на порт 80. Один и тот же обработчик ответа используется в обоих вызовах.
Первый вызов обработчика ответов устанавливает мою переменную «portToUse», а затем работает с нормальной функциональностью.
Это работает, когда порт 8001 не заблокирован. Если порт 8001 заблокирован, это также работает. Тем не менее, задержка на 5 секунд до моего ответа от порта 80 возвращается. Это не вызвано сервером. Я хотел бы устранить эту задержку.
Моя теория заключается в том, что хотя getJSON асинхронен, браузер только запускает один XMLHttpRequest за раз. Он ждет, пока первый не вернется или не закончится, прежде чем отправить следующий.
Я не уверен, что я прав. Если да, то есть ли способ обойти эту функциональность и одновременно отключить оба XMLHttpRequest? Если я ошибаюсь, у вас есть предложение относительно того, что может вызвать задержку в получении моего второго ответа (от порта 80 на моем сервере)? Любые и любые другие предложения приветствуются.
EDIT: Такое поведение наблюдается только в Firefox 3 и Opera 9.63. IE7 и Chrome не показывают эту задержку.
1+ хороший вопрос! – a432511