Как Facebook уведомляет и мгновенно показывает новые комментарии или как это делает Stackoverflow?

Я разработчик PHP, и название в основном говорит все. Однако я надеялся на более подробную информацию, поскольку я начинаю путать насчет того, как поток для проекта, над которым я работаю, должен идти.

Для (веб-приложения) мне нужно реализовать такую ​​функцию, как Facebook, она уведомляет пользователей об ответах/комментариях и мгновенно показывает их.

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

Поэтому я должен использовать некоторую форму сокетов, если я правильно понимаю, и Node.Js будет хорошим выбором. Поэтому, основываясь на последнем предположении, я теперь запутался в рабочем потоке.

Я подумал о двух возможных решениях:

1) Мне кажется, что если бы я использовал Node.Js, я мог бы вообще пропустить PHP и основать приложение только на Node.js.

2) Или я мог бы использовать PHP в качестве базы и использовать только Node.js для уведомления пользователей и мгновенного отображения сообщений, но сохранения данных с помощью PHP и Mysql.

Эти две возможности путают меня, и я не могу решить, что будет "лучшим" и самым чистым способом.

У меня не так много опыта в Node.js, который он играл некоторое время. Но управление и сохранение данных кажется трудным в Node.js, поэтому я придумал вариант 2.

Я знаю, что Facebook построен на PHP, поэтому я предполагаю, что они сохраняют данные через PHP и уведомляют/мгновенно показывают ответы и комментарии через Node.

Может ли кто-нибудь помочь мне в этом?

Спасибо заранее!

EDIT: Я просто заметил, что Stackoverflow делает что-то подобное. Я получаю уведомление в левом верхнем углу, а под моим вопросом - поле с "новым ответом на этот вопрос". Я действительно интересуюсь используемой технологией.

Ответ 1

Ну, вы можете использовать node.js для уведомлений и PHP для вашего приложения. По googling я нашел это о real-time-notifications. Вы также можете просто использовать node.js с socket.io, но это означает, что вам нужно изучать новые технологии, поскольку вы упоминаете, что у вас есть нет опыта с node.

Я не использовал его, но вы можете проверить этот проект, для веб-сайтов в PHP.

Если у вас есть обновление, которое вы хотите уведомить пользователей, вы можете использовать опубликованный шаблон подписчика, чтобы уведомить об этом в этом обновлении. Посмотрите Gearman.

Лично я создал систему уведомлений, используя механизм pubsub redis, с node.js + socket.io. Каждый раз, когда есть обновление в записи, есть публикация на соответствующем канале. Если на канале есть слушатели, они будут уведомлены. Я также сохраняю последние 20 уведомлений в списке Redis.

Приложение создано на PHP. Система уведомлений построена в node.js. Это разные приложения, которые видят одни и те же данные. Связь происходит через redis. Например, в контексте Facebook: 1) Пользователь обновляет свой статус. 2) PHP хранит это в базе данных и Redis 3) Redis знает, что это обновление должно публиковаться в канал статуса конкретного пользователя, и это так. 4) Все друзья конкретного пользователя прослушивают его канал статуса (здесь идет node.js) 5) node.js выталкивает уведомление в браузере с помощью socket.io

Что касается facebook, я прочитал статью, в которой используется длинный опрос для поддержки старых браузеров. Не уверенный в этом, хотя, нуждается в цитате...

Ответ 2

AFAIK Это было бы через два простых метода:

  • Первый, который может быть очень простым, заключается в добавлении булевского столбца в каждую запись, который определяет, было ли оно уведомлено или нет.

  • Второй способ - создать таблицу для вставки всех уведомлений.

Однако я не уверен, есть ли альтернативные методы для лучшей производительности, но первый метод - это то, что я обычно делаю сам. Но я думаю, что Facebook использует 2-й метод, потому что он должен уведомить каждого из них многим пользователям.

Ваш вопрос может быть оглашен:
Facebook как отслеживание уведомлений (дизайн базы данных)
Дизайн базы данных для хранения уведомлений пользователям

Ответ 3

Вы можете использовать Server Side Events, это связано с немного JavaScript, но ничего сложного, я думаю.

Основная часть этого метода - PHP, хотя, поэтому вы просто будете использовать PHP для запроса своей БД для уведомлений, и SSE подтолкнет их к пользователю.

У него есть некоторые ограничения, хотя, в частности, он не поддерживается IE (огромный сюрприз), подумал, что я бы упомянул об этом, чтобы вы знали о других возможностях.

Надеюсь, что это поможет