gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 23:03:11 25 4
gpt4 key购买 nike

我是一名 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 用于您的应用程序。通过谷歌搜索,我发现了这个关于 real-time-notifications .您也可以只使用 node.js with socket.io ,但这意味着您必须学习新技术,因为您提到您没有使用 Node 的经验。

我没用过,你可以看看this project , 用于 PHP 中的 websocket。

当您有想要通知用户的更新时,您可以使用发布 subscriber pattern通知对此更新感兴趣的人。看看Gearman也是。

就我个人而言,我使用 pubsub mechanism of redis 构建了一个通知系统。 ,使用 node.js+socket.io。每当记录有更新时,就会在相应的 channel 上发布。如果 channel 有听众,那么他们会收到通知。我还将最后 20 条通知存储在 Redis 列表中。

The appplication is built in PHP. The notification system is built in node.js. They are different applications that see the same data. The communication occurs via redis. For example in the Facebook context: 1) A user updates his status. 2) PHP stores this to the database and Redis 3) Redis knows that this update must publish to the status channel of the specific user and it does. 4) All the friends of the specific user are listening to his status channel (here comes node.js) 5) Node.js pushes the notification in the browser with socket.io

至于 facebook,我读过一篇文章,它使用长轮询来支持旧版浏览器。不过不确定,需要引用...

关于php - Facebook 如何通知并立即显示新评论,或者 Stackoverflow 是如何做到的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14601714/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com