我是一名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做了类似的事情。我在左上方收到通知,在我的问题下面有一个“问题新答案”的方框。我对所使用的技术非常感兴趣。
答案 0 :(得分:13)
您可以将node.js用于应用程序的通知和PHP。 通过谷歌搜索,我发现了real-time-notifications。 您也可以使用node.js with socket.io,但这意味着您必须学习新技术,因为您提到您没有使用节点的经验。
我还没有使用它,但您可以查看this project,了解PHP中的websockets。
如果您有要通知用户的更新,则可以使用发布subscriber pattern通知此更新中的新功能。 请查看Gearman。
就个人而言,我使用pubsub mechanism of redis和node.js + socket.io构建了一个通知系统。每当记录有更新时,就会在适当的频道上发布。如果频道有听众,那么他们会收到通知。我还将最后20个通知存储在Redis列表中。
appplication是用PHP构建的。通知系统内置于node.js.它们是看到相同数据的不同应用程序。通过redis进行通信。例如在Facebook上下文中: 1)用户更新其状态。 2)PHP将其存储到数据库和Redis中 3)Redis知道此更新必须发布到特定用户的状态通道,并且确实如此。 4)特定用户的所有朋友都在收听他的状态频道(这里是node.js) 5)Node.js使用socket.io
在浏览器中推送通知
至于facebook,我读过一篇使用长轮询支持旧版浏览器的文章。虽然不确定,需要引用......
答案 1 :(得分:1)
AFAIK这将通过两种简单的方法:
第一个可能非常简单的是为每条记录添加一个布尔列,以确定是否已通知。
第二种方法是创建一个表来插入所有通知。
但是,我不确定是否有其他方法可以提高性能,但第一种方法是我自己常做的。但我认为Facebook正在使用第二种方法,因为它必须通知每一个用户。
你的问题可能是讽刺的:
Facebook like notifications tracking (DB Design)
Database design to store notifications to users
答案 2 :(得分:0)
你可以使用Server Side Events它涉及一些JavaScript,但我认为没有什么过于复杂。
此方法的主要部分是PHP,因此您只需使用PHP查询数据库以获取通知,SSE会将其推送给用户。
它确实有一些限制,最值得注意的是它不受IE支持(巨大惊喜)以为我无论如何都会提到它,让你知道其他可能性。
希望这有帮助