Как работают обновления в реальном времени?
Теперь обновления в реальном времени в режиме реального времени распространены на большинстве популярных сайтов, которые имеют тяжелые привычки.
Мне интересно, как работают эти "обновления в реальном времени"? Я просто ищу общий взгляд на птицу. Я подозреваю, что JS не может вызывать сервер каждые X секунд для обновления, а затем добавлять его к <ul>
. Сообщение отправлено с сервера, чтобы получить больше контента?
Было бы здорово, если бы была простая статья, объясняющая это с помощью демонстрации?
Ответы
Ответ 1
Переполнение стека использует Web Sockets для обновлений в реальном времени. Если вы посмотрите в исходном коде (строка 35), вы увидите:
StackExchange.ready(function () {
StackExchange.realtime.init('ws://sockets.ny.stackexchange.com');
StackExchange.realtime.subscribeToInboxNotifications();
StackExchange.realtime.subscribeToReputationNotifications('1');
});
Но обратите внимание, что некоторые версии Opera не поддерживают WebSocket. (пока Opera 10.70)
Однако Facebook, похоже, не использует веб-сокеты, и я думаю, что они просто используют простой XHR с помощью метода длительный опрос, который сервер держит в соединении до появления новой информации, а затем сервер будет отвечать на запрос. Если вы откроете инструменты разработчика, вы увидите, что всегда есть один запрос, который имеет статус ожидания.
Это действительно, отправка запроса каждые ~ 60 секунд.
Ответ 2
Кажется, что Twitter также использует простые XHR (интервалы в 1 минуту) для своих "обновлений в реальном времени".
Ответ 3
Facebook использует long polling/Comet
. Таким образом, он устанавливает соединение и ждет ответа, если ответа нет, тогда он истекает время и снова пытается. Тайм-аут составляет около 40 секунд. То, как это делает большинство мгновенного обновления. Однако они используют комбинацию методов. Подробнее о длинном опросе здесь.
http://en.wikipedia.org/wiki/Comet_(programming)