Facebook如何通知和即时显示新的评论或如何Stackoverflow做到这一点?

我是一名PHP开发人员,标题基本上就是这么说的。 不过,我希望得到更深入的信息,因为我开始对我工作的项目stream程应该如何去感到困惑。

对于(networking)应用程序,我需要实现一个像Facebook这样的function,通知用户有关回复/评论,并立即显示这些内容。

我想我可以使用长轮询ajax请求,但这似乎并不是一个很好的解决scheme,因为通知从来没有真正的即时和资源沉重。

所以我应该使用某种forms的套接字,如果我理解正确,Node.Js将是一个不错的select。 所以根据最后的假设,我现在对工作stream程感到困惑。

我想到了两个可能的解决scheme:

1)在我看来,如果我会使用Node.Js,我可以跳过使用PHP,并只在Node.js基础的应用程序。

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

这两种可能性混淆了我,我不能确定什么是“最好”和最干净的方式。

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

我知道Facebookbuild立在PHP,所以我假设他们通过PHP保存数据,并通过节点通知/立即显示答复和评论。

有人可以帮我解决这个问题吗?

提前致谢!

编辑:我只是注意到,Stackoverflow做类似的事情。 我在左上angular收到一个通知,在我的问题下面有一个“新问题答案”的框。 我对使用的技术真的很感兴趣。

那么你可以使用node.js的通知和PHP为您的应用程序。 通过Googlesearch,我发现了这个实时通知 。 你也可以在socket.io中使用node.js ,但是这意味着你必须学习新的技术,因为你提到你没有节点的经验。

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

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

就我个人而言,我已经使用redis的pubsub机制 ,使用node.js + socket.io构build了一个通知系统。 每次有一个logging更新,然后在适当的频道发布。 如果频道有听众,则会通知他们。 我还将最近的20个通知存储在Redis列表中。

该应用程序是build立在PHP。 通知系统是在node.js中构build的。 他们是不同的应用程序,看到相同的数据。 通信通过redis进行。 例如在Facebook上下文中:1)用户更新他的状态。 2)PHP将其存储到数据库和Redis 3)Redis知道此更新必须发布到特定用户的状态通道,并且它已经完成。 4)特定用户的所有朋友正在监听他的状态信道(这里是node.js)5)Node.js在浏览器中用socket.io

至于脸书,我已经阅读了一篇文章,使用长轮询支持旧浏览器。 不确定,但需要引用…

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

  1. 第一个可能非常简单的方法是在每个logging中添加一个布尔列,以确定它是否已被通知。

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

但是,我不确定是否有更好的性能替代方法,但第一种方法是我自己做的一般。 但我认为Facebook正在使用第二种方法,因为它必须通知每个人很多用户。

你的问题可能是dublicate:
Facebook的通知跟踪(DBdevise)
数据库devise存储通知给用户

你可以使用服务器端事件,它涉及到一些JavaScript,但没有任何过于复杂,我认为。

这个方法的主要部分是PHP,所以你只需要使用PHP来查询你的数据库的通知和SSE将他们推送给用户。

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

希望这可以帮助