通知像macos Growl / facebook约会网站 - 从哪里开始?

时间:2010-10-10 14:48:03

标签: php jquery notifications push-notification

大家好我正在运行一个php / mysql约会网站,我希望在某些操作上为成员实现屏幕通知(例如,当其他成员查看您的个人资料,发送一个眨眼等等)。当有人在您的个人资料上发表评论或写信时,非常类似于在mac或facebook通知上咆哮。

我不太确定从哪里开始 - 我是否必须在服务器端实现一些推送机制?是否有客户端的jquery插件?

提前感谢。

2 个答案:

答案 0 :(得分:3)

通常是每隔一段时间从数据库中信息并将其显示给用户。在你的情况下,这可能就足够了。例如:

  1. 跟踪您要通知的内容。假设用户A访问用户B的个人资料,向用户B的通知表添加通知消息。如果用户C向用户B眨眼,则向用户B的列表添加另一个通知。

  2. 检查是否有新通知。检索完通知后,将其标记为已读,以便它们不再显示。

  3. <强> 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每5分钟调用一次'script.php','script.php'可能会向JS函数返回新的通知,你会显示这些消息。这只是为了让您了解可能的解决方案。

    真正的推送通知比看起来更难。这将需要一个持续的开放连接,允许新消息立即发送给用户。您需要查看Comet model之类的内容。但在大多数情况下,如果有轻微的延迟并不重要。我在我的示例中使用了5分钟,但也可能是1分钟或10或30分。这还取决于您拥有的用户数量以及这些常规检查将导致的负载类型。但通常所有这些都会在几分之一秒内完成,并且可以通过间隔轻松完成,即使它是一个非常短的间隔。

答案 1 :(得分:0)

我可能有点迟到这个答案,但如果有人来这里寻找与这种用例相关的客户端插件,我已经创建了一个开源的jQuery通知系统,可以与之无缝集成网络应用,称为jNotifyOSD。您可以在该链接上看到演示。代码向上on 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
});

更新[2012年12月13日]

已经有一段时间了,但我终于使用队列系统实现了对多个可见通知的支持。例如:

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

您可以看到演示here。我认为该插件现在足够灵活,可以涵盖各种用例。