约会网站的 macos Growl/facebook 等通知 - 从哪里开始?
Posted
技术标签:
【中文标题】约会网站的 macos Growl/facebook 等通知 - 从哪里开始?【英文标题】:Notifications like macos Growl/facebook for dating site - where to start? 【发布时间】:2010-10-10 14:48:03 【问题描述】:大家好,我正在运行一个 php/mysql 约会网站,我想为会员实现某些操作的屏幕通知(例如,当其他会员查看您的个人资料、向您眨眼等时)。非常类似于当有人在您的个人资料上见面或写字时在 mac 或 facebook 通知上咆哮。
我不太确定从哪里开始 - 我是否必须在服务器端实现一些推送机制?是否有任何用于客户端的 jquery 插件?
提前致谢。
【问题讨论】:
***.com/questions/333664/… 【参考方案1】:方法是每隔一段时间从数据库中提取信息并将其显示给用户。在您的情况下,这可能就足够了。示例:
跟踪您要通知的内容。假设用户 A 访问用户 B 的个人资料,将通知消息添加到用户 B 的通知表中。如果用户 C 对用户 B 眨眼,则在用户 B 的列表中添加另一个通知。
检查是否有新通知。检索通知后,将其标记为已读,以便不再显示。
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 函数返回新通知,你会显示这些消息。这只是为了让您了解可能的解决方案。
真正的 push 通知比看起来更难。这将需要一个持续打开的连接,以允许立即将新消息发送给用户。为此,您需要查看Comet model 之类的内容。但在大多数情况下,是否有轻微的延迟并不重要。我在示例中使用了 5 分钟,但也可能是 1 分钟或 10 或 30 分钟。这还取决于您拥有的用户数量以及这些常规检查将导致什么样的负载。但通常所有这一切都在几分之一秒内发生,并且可以很容易地通过一个间隔来完成,即使它很短。
【讨论】:
感谢一百万非常详细的回复。如果推送模型实施需要几天以上的时间,我肯定会使用它。【参考方案2】:这个答案我可能有点晚了,但是如果有人来这里寻找与这种用例相关的客户端插件,我已经制作了一个开源 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。我认为该插件现在足够灵活,可以涵盖各种用例。
【讨论】:
以上是关于约会网站的 macos Growl/facebook 等通知 - 从哪里开始?的主要内容,如果未能解决你的问题,请参考以下文章