Проблема кометы с оставленными открытыми связями - PullRequest
4 голосов
/ 18 января 2011

Я использую некоторые кометные приемы, включая длинный опрос и навсегда кадр.Я использую iframes для кросс-субдомена.Одна проблема, с которой я столкнулся при реализации этих методов, заключается в том, что когда пользователь обновляет страницу или переходит на другую страницу, вызывая новый запрос, соединение кометы остается открытым со старой страницы.Мой сервер (торнадо) никогда не получает закрытое соединение, и из-за моих ограниченных возможностей Wireshark я не вижу отправленных пакетов TCP fin.Однако когда я закрываю браузер, в этот момент сокеты закрываются.

Эти заброшенные открытые соединения просто используют память на стороне сервера без веской причины.Также это вызывает проблемы, когда сервер отправляет какое-то сообщение в открытый сокет, а IE корректно отображает сообщение об ошибке: «Не удается выполнить код из освобожденного скрипта».Таким образом, IE пытается выполнить код в старом окне, которое было удалено из.Как другие люди решают эту проблему?Должен ли я использовать onbeforeunload, чтобы как-то закрыть соединение?

1 Ответ

1 голос
/ 18 января 2011

Вы можете время от времени перезапускать открытое соединение со стороны клиента, и если запрос не поступил на сервер в указанный период времени, вы можете безопасно закрыть старое соединение.

...