Я не знаю, как это делает Facebook, я знаю, как бы я это делал с LAMP.
Есть два варианта - использование эмулированной полнодуплексной связи (или сервера PUSH, если хотите) и использованиефактическая полнодуплексная связь (протокол WebSockets).
Первая будет работать и в старых браузерах.В основном, через определенные промежутки времени вы запрашиваете базу данных.Используя Comet или регулярные длинные опросы, вы просто проверяете, есть ли новые записи, которые представляют интерес для текущего пользователя.Недостаток: неэффективно и не реально в реальном времени.
Второй будет работать только в новых браузерах (я не знаю, есть ли браузер, который реализует протокол WebSockets, кроме Chrome).Что происходит, так это то, что канал передачи данных идет двумя путями.Теперь ваш сервер может передавать клиенту информацию без необходимости запрашивать эти данные.Вверх: быстро, не тратит впустую, без накладных расходов, прост в использовании и реализации.Недостаток: работает только в небольшом количестве браузеров, протокол еще не завершен.
После того, как вы включили полнодуплексную связь между клиентом (браузером) и сервером, пришло время начать отправку данных!
Опять же, есть два способа - периодически запрашивать базу данных или фактически разрешать MySQL выполнять внешние программы.Я предпочитаю запускать внешние программы, но это имеет последствия для безопасности, которые я не буду сейчас затрагивать.
MySQL не имеет возможности сообщать какой-либо внешней программе о том, что произошло, что изменило данные.Вот почему мы можем расширить его с помощью пользовательских функций.
Один такой UDF, который представляет интерес sys_exec .
Итак, чтобы сократить его, используя sys_exec и WebSockets:
Таблица MySQL получает данные.Триггер вызывается, триггер содержит.sys_exec ( 'your_program_that_dispatches_changes_around').Вызывается программа, отвечающая за отправку данных, и она собирает данные, которые необходимо отправить всем подключенным клиентам (браузерам).Программа отправляет данные.
Вы получили полнодуплексное решение в реальном времени.
Это довольно сложно реализовать, поэтому использование Comet и регулярных вызовов AJAX - самый простой и быстрый способдостичь желаемой функциональности.