Facebook如何通知并立即显示新评论,或者Stackoverflow如何做到这一点


How does Facebook notify and instantly shows new comments or how does Stackoverflow do it?

我是一名PHP开发人员,标题基本上说明了一切。但是,我希望获得一些更深入的信息,因为我开始对我所从事的项目的流程应该如何感到困惑。

对于(网络)应用程序,我需要实现像Facebook这样的功能,通知用户有关回复/评论并立即显示这些回复/评论。

我想我可以对 ajax 请求使用长轮询,但这似乎不是一个很好的解决方案,因为通知永远不会是即时的,而且资源繁重。

因此,如果我理解正确,我应该使用某种形式的套接字,而 Node.Js 将是一个不错的选择。因此,基于最后一个假设,我现在对工作流程感到困惑。

我想到了两种可能的解决方案:

1)在我看来,如果我使用Node.JS,我可以完全跳过使用PHP并仅将应用程序基于Node.js。

2)或者我可以使用PHP作为基础,只使用Node.js通知用户并立即显示消息,但使用PHP和Mysql保存数据。

这两种可能性让我感到困惑,我无法决定什么是"最好"和最干净的方式。

我对 Node.js 没有太多经验,玩了一段时间。但是在 Node 中管理和保存数据似乎很困难.js所以这就是我想出选项 2 的原因。

我知道Facebook是建立在PHP之上的,所以我假设他们通过PHP保存数据,并通过Node通知/立即显示回复和评论。

有人可以帮助我吗?

提前感谢!

编辑:我刚刚注意到,Stackoverflow做了类似的事情。我在左上角收到一条通知,在我的问题下方有一个带有"此问题的新答案"的框。我对所使用的技术非常感兴趣。

好吧,

你可以使用node.js来表示通知,使用PHP来表示你的应用程序。通过谷歌搜索,我发现了关于实时通知的这个。你也可以只使用node.js和 socket.io,但这意味着你必须学习新技术,因为你提到你没有node的经验。

我没有使用过它,但你可以检查这个项目,了解 PHP 中的 websockets。

当您有要通知用户的更新时,可以使用发布订阅者模式来通知此更新中的用户。也看看Gearman。

就我个人而言,我已经使用 redis 的 pubsub 机制构建了一个通知系统,带有 node.js+socket.io。每次记录有更新时,相应的频道上都会发布。如果频道有侦听器,则会收到通知。我还将最近 20 条通知存储在 Redis 列表中。

该应用程序是用 PHP 构建的。通知系统内置在节点.js中。它们是查看相同数据的不同应用程序。通信通过 redis 进行。例如,在Facebook环境中: 1) 用户更新其状态。 2)PHP将其存储到数据库和Redis中 3) Redis 知道此更新必须发布到特定用户的状态通道,并且确实如此。 4)特定用户的所有好友都在收听他的状态频道(这里是node.js) 5)Node.js在浏览器中推送通知,socket.io

至于Facebook,我在一篇文章中读到过,该文章使用长轮询来支持较旧的浏览器。虽然不确定,但需要引用...

AFAIK 这将通过两种简单的方法:

  1. 第一个可能非常简单的是向每条记录添加一个布尔列,以确定它是否已收到通知。

  2. 第二种方法是创建一个表来插入所有通知。

但是,我

不确定是否有替代方法可以提高性能,但第一种方法是我自己通常做的事情。但我认为Facebook正在使用第二种方法,因为它必须通知每个用户。

您的问题可能为:
Facebook类通知跟踪(DB设计)
用于存储发送给用户的通知的数据库设计

您可以使用服务器端事件 它涉及一些JavaScript,但我认为没有什么过于复杂的。

这种方法的主要部分是PHP,因此您只需使用PHP查询数据库以获取通知,SSE就会将它们推送给用户。

不过,它确实有一些限制,最值得注意的是IE不支持它(巨大的惊喜),以为无论如何我都会提到它,让你知道其他可能性。

希望这有帮助

相关文章: