0

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

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

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

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

1
  • У вашего открытого соединения должен быть выставлен timeout, который вызовет abort() автоматически, по прошествии 30 секунд. Как только Вы отловили timeout, Вам следует открыть новое соединение.
    – StasHappy
    29 сен 2015 в 19:44

1 ответ 1

1

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

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

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

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

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

1
  • я бы возразил насчёт первого варианта. И думаю он вполне приемлем. Врятли кто-либо будет открывать 255 вкладок в своём браузере, создавая тем самым 255 соединений.
    – StasHappy
    29 сен 2015 в 19:42

Ваш ответ

By clicking “Отправить ответ”, you agree to our terms of service and acknowledge you have read our privacy policy.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками или задайте свой вопрос.