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 回答 4

4

当你决定使用 node.js + socket.io 来做一个实时的 web 应用程序时,你不需要再考虑 PHP 并且忘记 Ajax ...... Socket.io 将是客户端和服务器之间的通信.

但是,是的,您可以使用 Ajax 和 PHP 快速构建网站,以及其他一些不需要实时的功能

于 2012-09-22T08:54:26.190 回答
2

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

于 2012-05-08T02:02:50.400 回答
1

最后我的工作解决方案是#1。

当用户建立与 node.js/socket.io 的连接时,他只需使用他的 PHP 会话 ID 向 node.js 发送“订阅”消息。Node.js 使用对 PHP 后端的 POST 请求检查授权,如果一切正常,则允许用户建立连接。

前端将所有请求发送到 PHP,就像在 node.js 之前一样。PHP 修改了一些对象,检查谁可以访问修改的对象并将消息(通过 AMQP 或 redis pub/sub 等)发送到 node.js:

{
    id_object: 125342,
    users: [5, 23, 9882]
}

node.js 然后检查列出的用户中谁拥有活动套接字,并为每个用户向 PHP 发送 GET 请求:

{
    userId: 5,
    id_object: 125342
}

接收此请求的特殊 PHP 控制器运行查询以获取具有给定用户 ID 权限的对象,然后将消息发送到 node.js 并得到结果。Node.js 然后通过套接字将答案发送到用户的前端。

于 2013-05-09T07:26:56.483 回答
0

一年前,我在大学开始我的最后一年项目时遇到了同样的问题。我意识到我的项目更适合单独使用 Node。Node 非常擅长处理 I/O,这可以是从 HTTP 请求到数据库查询的任何事情。在 Node 后面添加基于 PHP 的 Web 服务器会增加不必要的复杂性。如果您的应用程序需要执行 CPU 密集型任务,您可以很容易地生成执行所需操作的“子”节点,并将结果返回给您的父节点。

但是,在您提到的两种方法中,我会选择#2。Node.js 可以通过多种方式与您的 PHP 服务器通信,您可以考虑在 PHP 服务器和 Node.js 之间创建一个 unix 套接字连接。如果这不可用,您可以简单地使用 HTTP 在 Node 和您的 PHP 后端之间进行通信。:)

看看这里,这是一个与您自己的问题非常相似的问题的解决方案:http: //forum.kohanaframework.org/discussion/comment/57607

于 2012-05-08T02:08:21.070 回答