使用node.js和socket.io与PHP应用程序配合使用

4

我有一个运行中的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个回答

4
当你决定使用node.js + socket.io来制作实时网络应用程序时,你就不需要再考虑PHP和Ajax了...Socket.io将成为客户端和服务器之间的通信方式。
但是,如果你想快速构建网站并执行一些不需要实时性的其他功能,你仍然可以使用Ajax和PHP。

2
第二种方法是最好的方式。您可以使用http从node.js与PHP进行通信。授权可以在node.js中完成,但是每次将auth凭据传递给PHP。

1

我的解决方案是 #1。

当用户连接到 node.js/socket.io 时,他只需向 node.js 发送带有他的 PHP 会话 ID 的“subscribe”消息。Node.js 使用 POST 请求检查授权,并在一切正常时允许用户建立连接。

前端将所有请求发送到 PHP,就像以前一样。 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通过套接字将答案发送到用户前端。


0
我在大学的毕业项目开始时也曾面临这个问题。我意识到我的项目更适合使用Node作为独立的工具。Node非常擅长处理I/O,可以处理从HTTP请求到数据库查询等任何内容。在Node后面添加基于PHP的Web服务器会增加不必要的复杂性。如果您的应用程序需要执行CPU密集型任务,您可以很容易地生成“子”节点进程来执行所需操作,并将结果返回给父节点。
然而,在你提到的两种方法中,我会选择第二种。Node.js可以通过多种方式与您的PHP服务器通信,您可以考虑在PHP服务器和Node之间创建Unix套接字连接。如果无法使用该方法,您可以简单地使用HTTP在Node和您的PHP后端之间进行通信。 :)
请看这里,这是一个与您类似的问题的解决方案: http://forum.kohanaframework.org/discussion/comment/57607

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接