Как работают обновления в реальном времени?
В настоящее время обновления в режиме реального времени распространены на большинстве популярных сайтов, которые часто используются.
- StackExchange
- щебет
Мне интересно, как работают эти "обновления в реальном времени"? Я просто ищу общий вид с высоты птичьего полета. Я подозреваю, что JS не может вызывать сервер каждые X секунд для обновления, а затем добавлять его к <ul>
, Отправлено ли уведомление с сервера, чтобы получить больше контента?
Было бы здорово, если бы была простая статья, которая объясняет это с помощью демоверсии?
3 ответа
Переполнение стека использует веб-сокеты для обновления в реальном времени. Если вы посмотрите на исходный код (исходный код 2012 года), вы увидите:
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 секунд.
Кажется, что Twitter также использует простой XHR (с интервалом в 1 минуту) для своих "обновлений в реальном времени".
Facebook использует long polling/Comet
, Таким образом, он устанавливает соединение и ждет ответа, если ответа нет, то время ожидания и повторная попытка. Время ожидания составляет около 40 секунд. Вот как это делает большую часть мгновенного обновления. Однако они используют комбинацию методов. Подробнее о длительных опросах здесь.