如何实现类似facebook的通知?

Posted

技术标签:

【中文标题】如何实现类似facebook的通知?【英文标题】:how to implement facebook like notification? 【发布时间】:2011-07-18 14:27:30 【问题描述】:

我正在尝试实现一个类似于 Facebook 的实时通知系统,以便在有人将他们添加为朋友时通知用户,例如他们的帖子或帖子对他们的 cmets 的回复。

所有的数据库和 php 部分都完成了,但我不知道如何像 Facebook 那样实现它。

每当有人在 Facebook 上对您的帖子点赞/点赞时,屏幕左下角就会出现浅蓝色框。只要有人点击“赞”按钮或在 Facebook 上发表评论,就会发生这种情况。我想知道我应该怎么做才能实现它。

使用 YUI 或任何 javascript 框架,我可以在 n 秒后查询数据库表以检查通知。这个方法太重了。

我想知道是否有任何服务器端模块或脚本可以完成,这样每当我的数据库表中有新的通知条目时,服务器就会告诉那个特定的客户端。这样可以完全避免客户端到服务器的不必要的请求调用,并且系统可以有效地为一次在线用户超过 50,000 的网站工作。

我怎样才能做到这一点?

【问题讨论】:

【参考方案1】:

做到这一点的唯一方法是使用某种机制(例如 Javascript)重复轮询服务器以获取更新。无法将服务器推送到 Web 浏览器。

【讨论】:

其实是这样。以各种不同的整洁和可靠性的方式。 这个答案非常具有误导性。 Forever 框架允许server push 的真实形式。【参考方案2】:

您应该研究COMET 技术,例如forever frame (tutorial) 和长轮询。这使您可以拥有一种服务器->客户端推送通信的形式。

【讨论】:

非常感谢您的回复。我会尽快了解这一点。有没有类似的方法可用?这样我就可以选择最好的了。脸书可能会使用什么?因为它不仅仅是通知系统,我将使用这个彗星之类的东西,而且每当一些用户发布回复用户评论等时,该消息将很快附加在底部,就像 facebook 一样.. 再次非常感谢你。 @Forte,其他主要技术在文章中列出。它们包括multipart/x-mixed-replace 和各种形式的投票。 @Matthew:那我猜像 Drupal 这样的内容管理系统支持这些东西。那么他们已经实现了COMET这个技术了吗? @Anto,我对 Drupal 了解不多,但我不会感到惊讶。 @MatthewFlaschen 两个链接都已失效。你可以用this和this替换它们【参考方案3】:

Facebook notification

【讨论】:

【参考方案4】:

您基本上设置了一个请求,例如调用向您的服务器/数据库请求该用户通知的服务。如果没有通知(可能在两次搜索之间Thread.Sleep),您可以执行一个 while 循环重试。您的 js 请求将超时,然后您可以在超时时再次调用该函数。这意味着长时间轮询afaik

【讨论】:

AFAIK,这不是长轮询的意思。 这实际上是长轮询。【参考方案5】:

我真的很惊讶没有人提到PubNub 和Pusher

这两个(竞争对手)正在构建允许实时通知的基础架构,就像 Facebook 一样。

【讨论】:

@aminejallouli 问题没有指定解决方案必须是免费的。

以上是关于如何实现类似facebook的通知?的主要内容,如果未能解决你的问题,请参考以下文章

如何在应用关闭时显示推送通知,类似于 facebook 和 whatsapp

如何实现类似 highrise 或 facebook 的权限系统

Facebook 如何通知并立即显示新评论,或者 *** 是如何做到的?

如何在 Rails 中创建通知系统?

Symfony 网络通知

facebook app 如何实现可拖动的浮动Button