我想在我的网站上建立一个通知系统,类似于Facebook。通知不需要实时。
这就是我的想法:
用户创建活动(上传新照片,为照片添加新评论,甚至向所有用户发送管理提醒)
每5分钟运行一次cronjob,将通知添加到通知表中:id|id_content|type_of_content_enum|affected_user_id|date|seen_bool
cronjob将为每种类型的通知运行多个函数,例如:
add_photos_notification()
//此功能将检查过去5分钟内添加的所有照片,并在通知表中为此人跟踪的每个用户插入一行。该功能会将过去5分钟内添加的所有照片分组,因此关注者不会收到相同类型内容的许多通知。导致通知如下:用户X在他的个人资料中添加了Y张照片。
add_admin_notification()
//此函数将检查过去5分钟内网站管理添加的所有新闻,并在通知表中为系统中的每个用户插入一行...
这是构建通知系统的正确方法吗?
是否有可能错过一个事件,每5分钟运行一次cron,其中函数检索过去5分钟的事件?
为了安全起见,您认为替代方案可以检查通知字段的所有事件吗?不是真的吗?同样的功能将抓住通知的事件' = false,将该通知添加到通知表后将其更新为true。
谢谢,
答案 0 :(得分:3)
到目前为止,我选择了cronjob路线并且工作正常。由于我们的系统得到了很多用户的通知,我发现这是最合适的方式,原因有两个。
我不需要编辑当前的脚本代码,插入函数来为我想要通知的每个事件添加通知。
由于某些操作会受到许多用户的影响,因此实时添加通知可能会导致脚本延迟和超时。
我构建了一个名为notifications的类,在这个类中,有一些函数可以为我想要通知的每个事件添加通知,例如:user_added_a_new_photo(); user_commented_on_a_photo();
对于每个生成的通知,我为每个用户添加1个条目以进行通知。这就是我的通知db的样子:
id
affected_user_id //user being notified
user_generating_the_notification_id
content_type // enum containing all type of notifications my system has (example: photo, video, comment) ...
content_json // a json containing the notification content. Based on the content type, on the display view file, I call helpers that will format the notification row using the json info.
date // the date the notification was added
seen_on // the date the user saw the notification
clicked_on // if user clicked on the notification, store the date he clicked on it
display // true or false
到目前为止,运行它并解决我的需求没有问题。
唯一的缺点,因为cronjobs只能每1分钟运行一次,通知可能有1分钟的延迟。但由于我不需要实时,我将cronjob设置为每5分钟运行一次。
答案 1 :(得分:0)
我一直在研究这样的事情,我刚刚在stackoverflow上找到了这个问题
Building a notification system
看一下答案,用户确实对如何实现这种系统的理论有所了解。
据我所知,您需要为每个通知创建一个记录或对象,如果100个人订阅该事件,那么将生成100个记录。加载页面时,系统会找到与登录用户对应的所有通知(可能是记录ID),然后您会通知用户他们有多少通知。
现在另一种方法(注意我没有实现任何这些,它们只是想法)将在一个表中发出通知,然后我们有一个第二个表将保存用户ID和通知ID,用户将在订阅通知时添加到此表中,例如,确认朋友请求。
请再次注意,这些都不是经过验证的方法,它们是我对此事的一些研究的结果,我在阅读之前给你的帖子。