我有工作的PHP应用程序。它允许用户创建私有项目并邀请其中的其他人。现在,使用node.js和socket.io,我想制作实时评论,帖子等。
什么是最好的架构?
我现在看到两种解决方案。
第一个是:
第二个是:
最好的方法是什么?还有其他方法吗?如何正确实现?
答案 0 :(得分:4)
当您决定使用node.js + socket.io制作实时网络应用程序时,您不再需要考虑PHP而忘记Ajax ... Socket.io将是之间的通信客户端和服务器。
但是,是的,您可以使用Ajax和PHP快速构建网站,以及其他一些不需要实时的功能
答案 1 :(得分:2)
第二种方法是最好的方法。您可以使用http从node.js与PHP通信。授权可以在node.js中完成,但每次都将auth凭证传递给PHP
答案 2 :(得分:1)
最后,我的工作解决方案是#1。
当用户建立与node.js / socket.io的连接时,他只需使用他的PHP会话ID向node.js发送'subscribe'消息。 Node.js使用POST请求检查授权到PHP后端,如果一切正常,则允许用户建立连接。
Frontend将所有请求发送到node.js之前的所有请求。 PHP修改了一些对象,检查谁可以访问修改过的对象并将消息(通过AMQP或redis pub / sub等)发送到node.js:
{
id_object: 125342,
users: [5, 23, 9882]
}
node.js然后检查列出的用户中谁有活动套接字,并为每个用户发送GET请求到PHP:
{
userId: 5,
id_object: 125342
}
接收此请求的特殊PHP控制器运行查询以获取具有给定用户ID权限的对象,然后将消息发送到node.js并生成答案。 Node.js然后通过套接字向用户的前端发送答案。
答案 3 :(得分:0)
一年前我在大学开始我的最后一年项目时遇到了同样的问题。我意识到我的项目更适合使用Node作为独立项。 Node非常擅长处理I / O,这可以是从HTTP请求到数据库查询的任何内容。在Node之后添加基于PHP的Web服务器将增加不必要的复杂性。如果您的应用程序需要执行CPU密集型任务,您可以很容易地生成“孩子”。已处理的节点执行所需的操作,并将结果返回到父节点。
然而,在你提到的两种方法中,我会选择#2。 Node.js可以通过多种方式与您的PHP服务器通信,您可以在PHP服务器和Node之间创建一个unix套接字连接。如果它不可用,您可以使用HTTP在Node和PHP后端之间进行简单的通信。 :)
看看这里,这是一个非常类似于你自己的问题的解决方案: http://forum.kohanaframework.org/discussion/comment/57607