Фон
Я использую Tornado-подобный сервер с поддержкой длинных опросов. Каждая новая веб-страница, на которую приходит пользователь, устанавливает длинный опрос на сервере, например:
$.ajax({
type: 'GET',
url: "/mylongpollurl/",
dataType: 'application/json',
success: function(json) {
// I do stuff here
},
error: function(xhr, errText, ex) {
// If timeout I send a new long-poll request
}
});
Задача
Теперь я буду полагаться на данные, полученные от Fiddler, которые отслеживают все запросы, сделанные из моего браузера (на данный момент FF).
- Страница 1 загружена, и сделан запрос на длительный опрос, теперь он находится в режиме ожидания на стороне сервера.
- Я нажимаю ссылку на страницу 2, и эта страница загружается и настраивает длинный запрос опроса, НО длинный запрос опроса со страницы 1 все еще не работает на стороне сервера (согласно Fiddler).
Это означает, что я буду складывать все длительные вызовы опроса при щелчке по странице, поэтому у меня будет много активных соединений на сервере (или они могут делиться соединением?)
Мои мысли
- Так как это сервер типа Tornado (использующий epoll), он может обрабатывать довольно много соединений. Но этот факт не использовать на мой взгляд. Я имею в виду, что для этого случая я предпочитаю не использовать тайм-аут на сервере (если клиент исчезает).
- Я знаю, что эти автономные страницы лучше используют общий заголовок и меняют контент только через ajax-вызовы, но этот дизайн, который мы используем сегодня, не был моим вызовом ...
- Лучший способ решить эту проблему, вероятно, состоит в том, чтобы повторно использовать соединение (думаю, его трудно установить) или закрыть, как только браузер покинет страницу (вы переходите на другую страницу).
Спасибо
- MyGGaN