node.js 和 PHP 之间如何通信?

Posted

技术标签:

【中文标题】node.js 和 PHP 之间如何通信?【英文标题】:How to communicate between node.js and PHP? 【发布时间】:2014-08-18 16:47:30 【问题描述】:

我有一个现有的 php 网站,我希望使用 node.js 添加一个实时通知系统

我已将我的应用程序的结构概述到下图中:

我假设生成通知时 PHP 和 Node.js 之间的通信是实现实时通知的唯一方法(除非我在 node.js 中重新编码我的整个网站,这是不可能的)

我如何从 PHP 与 node.js 通信? (两者都存在于同一台服务器上或至少同一个本地 LAN)

我在网上和一些 SO 线程上找到了一些解决方案:

使用 redis 发布订阅:http://xmeng.wordpress.com/2011/11/14/pubsub-in-redis-using-php/ 使用 DNode:http://bergie.iki.fi/blog/dnode-make_php_and_node-js_talk_to_each_other/

还有其他更好的方法吗?

所有通知也不会发送给所有订阅者。

因此,用户 1 生成的通知只会发送给用户 2、3 和 4(因为我的网络应用程序的一些业务规则) 这个权限系统需要维护。如何确保所有订阅者都不会收到所有通知?

实现这一目标的最有效方法是什么?

【问题讨论】:

我会说使用 Redis。对于您的权限系统,您可以为每个 Redis 发送比消息本身更多的信息。所以你也可以把通知应该发给谁的信息打包。 你研究过谷歌协议缓冲区吗? 我假设您的 Node.js 应用程序使用了一些网络,那么为什么不通过 HTTP 与其通信呢? (PHP 中的 cURL,在 Node.js 端监听专用端口)。 Dnode 为我工作。谢谢! 【参考方案1】:

我知道这个答案来得太晚了,但几天前我遇到了同样的问题。

我们对此的解决方案是在中间使用像 RabbitMQ 这样的消息代理。基本上,作为producer 的 PHP 会在有要推送的内容时创建消息,而另一方面,作为 consumer 的 Node.js 会监听队列并在有新内容时发布消息。

与 PHP 和 Node.js 之间的直接通信相比,这种方法有几个优点。

首先,它是异步的。因此,用户将执行其操作而无需等待。 如果由于某种原因 Node.js 失败,因为消息将存储在 RabbitMQ 中,一旦您重新启动节点,它就会从停止的地方继续。 Php 和 Node.js 松散耦合。 有效。

【讨论】:

以上是关于node.js 和 PHP 之间如何通信?的主要内容,如果未能解决你的问题,请参考以下文章

如何在Air Action Script应用程序和Node.js服务器之间进行通信

Node.js 和 Java 之间的 IPC 通信

如何在 Node.js 和浏览器之间共享代码?

如何在 node.js 服务器上的 PHP Web 服务器和 Socket.io 之间创建握手?

Android、PHP和node.js之间的加解密

PHP 和 node.js 在同一台服务器上