将node.js和socket.io与PHP应用程序一起使用

时间:2012-05-07 18:30:39

标签: node.js socket.io

我有工作的PHP应用程序。它允许用户创建私有项目并邀请其中的其他人。现在,使用node.js和socket.io,我想制作实时评论,帖子等。

什么是最好的架构?

我现在看到两种解决方案。

第一个是:

  • 用户向PHP后端发送AJAX查询: http://example.com/comment_add.php?text= ...
  • comment_add.php补充​​道 评论数据库和通过AMPQ(或更好的东西?)通知 node.js服务器,它向频道的订阅者广播评论。

第二个是:

  • 用户向node.js服务器发送AJAX查询:http://example.com:3000/comment_add
  • Node.js向PHP后端发送请求(但如何?授权怎么办?),接收响应,然后广播给频道的订阅者。

最好的方法是什么?还有其他方法吗?如何正确实现?

4 个答案:

答案 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