2012-01-21 8 views
1

Я поддерживаю и старую основанную на PHP CMS, которая содержит программное обеспечение для форумов, систему публикации статей, среди прочего - все обычай. Теперь владельцы хотят реализовать глобальное псевдо реальное время (это, вероятно, просто обновить один раз каждые десять секунд, или что-то) поток активности, похожее на тот, на Facebook:Поток активности в реальном времени

enter image description here

Прямо сейчас я m, пытаясь придумать лучший и простой способ реализовать это таким образом, чтобы его можно было легко расширить, включив в него различные виды деятельности (создание записей в блогах, комментирование фотоальбомов/сообщений в блогах, создание или ответ на темы форума, публикация статьи и т. д.)

Передний бит не должен быть слишком твердым, Что я не уверен в том, как настроить таблицу событий в соответствии с ommodate для всех различных видов событий, которые будут включены. Все события будут включать в себя такие вещи, как идентификатор пользователя, URL-адрес, дату-время и «тип события», но мне нужно было бы сохранить очень разные данные в зависимости от того, создал ли пользователь фотоальбом или кто-то ответил на тему форума , Как я могу это решить?

ответ

4

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

Я бы не использовать отдельную таблицу событий для хранения «действий» по следующим причинам:

  • информация только действительный в течение короткого периода времени (до тех пор, пока требуется, чтобы элемент исчез из верхней части списка), поэтому вы хотите очистить старые значения, по существу создавая супертяжелый буфер FIFO
  • . Вы должны хранить дубликат существующих данных в вашей системе (т. е. запись, в которой говорится, что новостной сюжет X был создан в то время, когда в записи для новостной истории уже есть время создания на нем)
  • , если действие отменено (или элемент удален), вам также необходимо будет удалить соответствующую запись в таблице событий.
  • . Различные типы событий будут иметь различную информацию и метаданные, что затрудняет их нормализацию в единую схему таблицы

Вы могли:

  • запустить запланированный сценарий каждые 5 минут или около того, что чеки для любой новой деятельности (т.е. ищет новые сообщения меньше, чем X минут) и записывает статический файл HTML с содержимым фида активности, который может быть встроен во все страницы, где он должен быть видимым
  • записывайте свои действия в хранилище в памяти (например, memcache) как и когда они появятся и закроют записи старше, что ваш максимальный возраст действия в то же время
  • создайте фид, который позволяет получать последние данные о действии «на лету», но сидит за прокси-сервером, который будет кэшировать его в течение определенного периода времени ... (этот подход будет также хорошо работать для фидов для каждого пользователя)

ОБНОВЛЕНИЕ: Оригинальный плакат подтвердил, что все пользователи видят одинаковое содержимое корма. Исходя из этого, я бы рекомендовал, чтобы simpest-решение планировало сценарий, который генерирует статический HTML-файл фида, который может быть встроен прямо на нужную страницу (так как он не требует установки и настройки хранилища в памяти или прокси-сервера сервер).

+0

Ваше предположение верно. Все пользователи будут видеть один и тот же канал. Что касается рекомендованных подходов: 1. Это похоже на то, о чем я думал, но проблема заключается в том, что он не будет находиться где-то рядом с реальным временем. Клиент хочет приятного эффекта слайдов всякий раз, когда происходит новое. Как я уже сказал в своем посте, это не должно быть _really_ в реальном времени, но по крайней мере. 2. Это звучит очень интересно. Я посмотрю. 3. Такая же проблема, как # 1. Очень хороший ответ, хотя! –

+0

Ничего не мешает вам генерировать статический файл каждую минуту, если хотите (и сценарий достаточно быстр, чтобы сделать реалистичный вариант). Затем с помощью нескольких строк Javascript вы можете восстановить статический html-файл и вставить его в контейнер на странице. –

+0

Однажды каждую минуту все еще было слишком медленно. Один раз каждые 10 секунд будет приемлемым. Я только что начал проверять memcached, но я решил, что я попрошу, прежде чем я углубится: будут ли сохраненные значения в memcached глобальными? Поэтому, если пользователь # 1 создает поток форума, я могу нажать объект, который представляет его на memcached, а затем, в следующий раз, когда поток будет обновлен для пользователя № 2, они увидели бы этот объект? –

Смежные вопросы