【问题标题】:Using node.js and socket.io with PHP application在 PHP 应用程序中使用 node.js 和 socket.io
【发布时间】:2012-05-07 18:30:39
【问题描述】:

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

什么是最好的架构?

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

第一个是:

  • 用户向 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 后端发送请求(但是如何?授权呢?),接收响应,然后广播给频道的订阅者。

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

【问题讨论】:

    标签: node.js socket.io


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

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

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

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

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

        {
            userId: 5,
            id_object: 125342
        }
        

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

        【讨论】:

          【解决方案4】:

          一年前,我在大学开始我的最后一年项目时遇到了同样的问题。我意识到我的项目更适合单独使用 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

          【讨论】:

            猜你喜欢
            • 2017-01-25
            • 1970-01-01
            • 2017-06-30
            • 2016-09-20
            • 2013-08-17
            • 1970-01-01
            • 1970-01-01
            • 2015-05-20
            • 2017-10-25
            相关资源
            最近更新 更多