Opera оставляет открытыми длинные опросы - PullRequest
0 голосов
/ 01 февраля 2011

У нас проблема с долгим опросом и оперой.Я сам являюсь c-программистом и разработал настроенный http-демон для наших нужд.В этом случае нам нужен был длинный сервер опросов, который мог бы обрабатывать большое количество подключений.

Проблема в том, что Opera каким-то образом оставляет эти длинные опросы открытыми даже после нажатия какой-либо ссылки на сайте и, конечно, открывает новыеодин.Мы используем базовую технику длинных опросов, которая пытается включить JavaScript внутри iframe.Это прекрасно работает с другими браузерами, но даже если я заставлю предыдущие опросы закрываться на стороне сервера, Opera снова их открывает.Это не очень хорошо, потому что на сайте с высоким трафиком лишь немногие пользователи оперы могут заставить демона быстро исчерпать бесплатные файловые дескрипторы, просто просматривая сайт (потому что каждый клик на сайте открывает новый длинный опрос, а старые не закрываются).Обновление страницы не вызывает того же самого, оно делает правильную вещь: закрывает длинный опрос и открывает новый.После закрытия Opera все файловые дескрипторы закрываются, и все снова в порядке.

Итак, я должен добавить некоторые специальные заголовки для Opera в http-демон или в нашем javascript что-то не так?

edit: протестировано с использованием версии: Opera / 9.80 (X11; Linux x86_64; U; en) Presto / 2.6.30 Версия / 10.63

Ответы [ 2 ]

0 голосов
/ 02 февраля 2011

Ну, я думаю, у нас это "работает" .. Без изменения javascript.Я сделал специальное правило для оперы в http-демоне, который отвечает на старые длинные опросы «403 Forbidden» (почему я не пробовал это раньше, вопрос: P).Простое close () на этих старых сокетах только что заставило Opera вновь открыть соединение.

Смешно, что Opera не закрывает эти длинные опросы, даже если я закрываю вкладку в браузере, мне приходится закрывать всю оперу.процесс.

0 голосов
/ 01 февраля 2011

Мы используем базовую технику длинных опросов, которая пытается включить JavaScript в iframe.

Таким образом, рассматриваемые сокеты предоставляют контент для iframe?

Конечно, кажется, что Opera должна закрывать эти соединения, если вы щелкнете со страницы. Но вы можете попробовать явно уничтожить iframes при выходе из страницы, например:

window.onbeforeunload = function() {
    theIframe.parentNode.removeChild(theIframe);
    theIframe = undefined;
};

(Я полагаю, у вас есть ссылка на iframe, лежащий где-то рядом.)

Редактировать : Или даже сначала перемещаться по фрейму в другом месте:

window.onbeforeunload = function() {
    theIframe.src = "about:blank";             // <== New bit
    theIframe.parentNode.removeChild(theIframe);
    theIframe = undefined;
};
...