Уведомления типа macos Growl / facebook для сайта знакомств - с чего начать? - PullRequest
0 голосов
/ 10 октября 2010

Привет всем! У меня есть сайт знакомств php / mysql, и я хочу внедрить на экране уведомления для пользователей об определенных действиях (например, когда другой участник просматривает ваш профиль, отправляет вам сообщение и т. Д.). Очень похоже на рычание на уведомлениях Mac или Facebook, когда кто-то комментирует или пишет в вашем профиле.

Я не совсем уверен, с чего начать - придется ли мне внедрять какой-то механизм push на стороне сервера? Есть ли плагины jquery для клиентской стороны?

спасибо заранее.

Ответы [ 2 ]

3 голосов
/ 10 октября 2010

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

  1. Следите за тем, что вы хотите уведомить.Скажем, пользователь A посещает профиль пользователя B, добавляет сообщение уведомления в таблицу уведомлений для пользователя B. Если пользователь C подмигивает пользователю B, добавьте другое уведомление в список пользователя B.

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

JS

// set an interval to run a function every 5 minutes
// (300000 = 1000 * 60 seconds * 5 minutes)
setInterval(function() {
    // call on check.php
    $.post('check.php', {
        // add a variable with the userId,
        // so the script knows what to check
        userId: 123
    }, function(data) {
        // say there are notifications, which are stored in data
        // now display them in any way you like
    });
}, 300000);

check.php

$userId = $_POST['userId'];

// make sure to only show new messages
$notifications = array();
$sql = "SELECT message FROM notifications WHERE userId = $userId AND new = 1";
$res = mysql_query($sql) or die(mysql_error());
if (mysql_num_rows($res)) {
    while ($r = mysql_fetch_object($res)) {
        $notifications[] = $r->message;
    }
}

// now make sure that all the notifications are set to new = 0
$sql = "UPDATE notifications SET new = 0 WHERE userId = $userId";
mysql_query($sql) or die(mysql_error());

// you can handle the markup wherever you want,
// e.g. here and simply show each message a new line
// this data will be returned to the jQuery $.post method
echo implode('<br />', $notifications);

Итак, в основном: JS вызывает 'script.php' каждые 5 минут, 'script.php', возможно, возвращает новые уведомления в функцию JS, вы отображаете эти сообщения,Это просто для того, чтобы дать вам представление о возможном решении.

Реальное push уведомление сложнее, чем кажется.Это потребует постоянного открытого соединения, которое позволит мгновенно отправлять новые сообщения пользователю.Для этого вам нужно посмотреть что-то вроде модели кометы .Но в большинстве случаев это не имеет значения, если есть небольшая задержка.Я использовал 5 минут в своем примере, но это также может быть 1 минута или 10 или 30. Это также зависит от количества пользователей, которые у вас есть, и какой нагрузки будут вызывать эти регулярные проверки.Но обычно все это происходит за доли секунды и может быть легко выполнено с интервалом, даже если он очень короткий.

0 голосов
/ 21 августа 2011

Я могу немного опоздать с этим ответом, но если кто-нибудь придет сюда в поисках плагина на стороне клиента, относящегося к этому виду использования, я создал систему уведомлений с открытым исходным кодом jQuery, которая может быть легко интегрирована свеб-приложения, которые называются jNotifyOSD .Вы можете увидеть демо по этой ссылке.Код на на GitHub .Я пытался сохранить API чистым и простым в использовании.Вот пример:

$.notify_osd.create({
  'text'        : 'Hi!',             // notification message
  'icon'        : 'images/icon.png', // icon path, 48x48
  'sticky'      : false,             // if true, timeout is ignored
  'timeout'     : 6,                 // disappears after 6 seconds
  'dismissable' : true               // can be dismissed manually
});

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

$.notify_osd.setup({
  'icon'        : 'images/default.png',
  'sticky'      : false,
  'timeout'     : 8
});

ОБНОВЛЕНИЕ [13-еДек, 2012] :

Прошло некоторое время, но я наконец-то реализовал поддержку нескольких видимых уведомлений с помощью системы очередей.Так, например:

$.notify_osd.setup({
  // ... config ...
  'visible_max' : 5                  // max 5 notifications visible simultaneously
  'spacing'     : 30                 // spacing between consecutive notifications
});

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

...