При запросе ajax и попытке перейти по ссылке браузер виснет

Рейтинг: 0Ответов: 1Опубликовано: 12.11.2014

Приветствую всех.

Я уже задавал вопрос здесь по long-polling, но сейчас меня интересует немного другое, больше суток бился, но так и не понял, как избежать проблемы.

Вкратце:
Я реализовал на стороне сервера цикл, который работает не более 30 секунд вне зависимости, имеются новые данные или нет. Так вот, AJAX ожидает ответа от сервера, и если в течение этого ожидания (30 секунд в моем случае) ответ не приходит и попытаться перейти по какой-нибудь ссылке, то браузер переходит в зависшее состояние и, пока не получит ответ, не выполняет указанное ему действие. Можно, конечно, навешать на все ссылки событие по клику, на которое сработает abort(), но, мне кажется, это извращенно как-то. Если откровенно, я не до конца понимаю, как работает long-polling, и думаю, в этом моя проблема.

Ребят, какие у вас соображения?

Ответы

▲ 1

Я правильно понял, что у вас на каждой из вкладок создаётся long polling соединение с сайтом? Если так, то всё правильно. Насколько я помню, по стандарту c одним доменом должно быть не более 2 соединений, chrome ограничивается шестью. Дальше он ждёт, пока завершится одно из открытых соединений.

Варианта два:

  1. Неправильно:
    Отправлять long polling на разные подменены, обходя ограничение открытых соединений, но это неправильно, так как тот же chrom в сумме на все домены открывает только 255 соединений, и проблема повторится.

  2. Правильно:
    Открывать на все вкладки одно общее соединение и все данные гонять только через него. А обмен сообщениями между вкладками проводить через событие onStorage.

Можете в качестве примера разобрать JS API от моего comet сервера (https://github.com/Levhav/CometServerApi.js).