Как работают обновления в реальном времени?

В настоящее время обновления в режиме реального времени распространены на большинстве популярных сайтов, которые часто используются.

Мне интересно, как работают эти "обновления в реальном времени"? Я просто ищу общий вид с высоты птичьего полета. Я подозреваю, что 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 секунд. Вот как это делает большую часть мгновенного обновления. Однако они используют комбинацию методов. Подробнее о длительных опросах здесь.

http://en.wikipedia.org/wiki/Comet_(programming)

Другие вопросы по тегам