Система уведомлений, похожая на facebook, на php

Как я могу внедрить систему уведомлений, подобную facebook: - Пользователь A пишет сообщение пользователю B - Слушатель в базе данных направляет сообщение пользователю B - В интерфейсе пользователя B сообщение появляется мгновенно

Как я могу сделать это в php?

Спасибо большое,

С уважением


person Zakaria    schedule 30.08.2010    source источник
comment
Я очень ценю ваши идеи. У вас есть кусок кода, чтобы поделиться? Спасибо еще раз.   -  person Zakaria    schedule 31.08.2010
comment
Это довольно сложная система. Лучше всего попробовать это самостоятельно и задать конкретные вопросы о том, где вы застряли. Я был бы счастлив взять с вас мою стандартную плату, если вы либо хотите, чтобы я написал это для вас, либо сесть за виртуальную встречу 1 на 1.   -  person bradenkeith    schedule 31.08.2010


Ответы (7)


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

Посмотрите на node.js, cometd или другое решение, основанное на push. Если вам нужно что-то простое и нужно быстро приступить к работе, я бы порекомендовал http://pusherapp.com/. . У них есть PHP-клиент и очень простой API.

person Johnathan Leppert    schedule 13.11.2010

У меня есть хорошо работающая система. В основном он настроен так:

id_уведомления
id_пользователя
модуль
тип_действия
добавлено_по
прочитано
дата_прочитано
добавлено

Это простой способ сделать это. user_id — это имя пользователя, add_by — идентификатор пользователя, выполнившего действие. Модуль — это место, где оно было выполнено, а action_type — это то, что произошло (комментарий, удаление, добавление и т. д.). Прочитано, если оно уже было просмотрено, а read_date — когда оно было просмотрено.

Затем у меня есть класс, который строит формулировку на основе приведенных выше значений.

Затем я настроил crontab, который будет очищать старые уведомления в базе данных после стольких дней.

person bradenkeith    schedule 30.08.2010

Вы можете сделать это одним из двух способов. В PHP самым простым способом будет «опрос». Более новый и аккуратный метод — использование HTTP Push с сервером Comet; но это не так хорошо для PHP.

Чтобы использовать опрос, просто обновите таблицу в базе данных, указав сообщение пользователя A, помеченное как подлежащее доставке пользователю b. У вас есть скрипт, запускаемый каждые несколько секунд через ajax, который опрашивает базу данных на наличие сообщения на клиенте пользователя. Если сообщение есть, вы заполняете его. Это очень неэффективно.

person KeatsKelleher    schedule 30.08.2010

Сервер Comet не так просто написать на PHP, но это можно сделать с помощью сна. Есть также функции сокетов, которые могут быть полезны:

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

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

person v6ak    schedule 01.09.2010
comment
Это ужасная идея. PHP не предназначен для длительного опроса. - person Alec Smart; 13.11.2010

Как упомянул akellehe, вы можете просто опросить с помощью Ajax, чтобы найти новый контент, если ваши пользователи, вероятно, останутся на одной и той же странице в течение длительного периода времени. Если абсолютная доставка в реальном времени не является необходимостью, намного эффективнее проверять наличие новых уведомлений при перезагрузке страницы, особенно если вы кешируете (например, memcached) все события, ожидающие пользователя, и аннулируете только этот счетчик в событии. что-то добавляется в их очередь уведомлений. Это избавит вас от множества запросов к базе данных с пустыми руками.

person Jeff Standen    schedule 20.09.2010

Очень даже возможно в наше время. Я знаю, что этот ответ приходит очень поздно, но он поможет тем, кто будет просматривать эту страницу за помощью. Перейдите по ссылке ниже, чтобы ознакомиться с отличным руководством по Уведомление в реальном времени, как в Facebook

person Diamond    schedule 24.08.2013

В настоящее время лучшим решением является использование socket.io (http://socket.io/). Он автоматически выбирает лучший (и доступный!) способ передачи данных, в том числе: WebSockets, Adobe Flash Socket, Ajax-опрос. Вы действительно не беспокоитесь о доступности способов связи на стороне клиента.

person Webowiec    schedule 19.06.2016