20

我有一个现有的 PHP 应用程序,我需要向其中添加实时通知。为了实现这一点,我安装了 node.js(打算为所有实时功能添加 socket.io)

然而。尽管花了最后三个小时研究并试图弄清楚如何将两者结合起来,但我发现自己并没有更接近获得理解。

我目前正在使用以下内容:

  • 阿帕奇
  • PHP
  • Nginx(作为 Apache 的反向代理,用于所有静态内容,如图像/css 文件等)
  • MySQL

我已经编写了从客户端向 PHP 发送事件并将通知插入数据库的代码。当收件人刷新他们的页面时,他们当然会看到通知。我只需要 node.js 来处理实时推送到客户端,但不知道如何设置它。

鉴于这种情况,我真正需要知道的是以下内容:

  1. 鉴于我希望仍然通过 Apache/PHP 提供所有内容,如何/何时实例化与客户端的 node.js/websocket 连接?
  2. 如何从 PHP 向 Node.js 发送消息并指示它向客户端推送通知?
  3. 为了支持这一点,我需要对我的设置进行什么样的后端修改?

最终,我希望能够简单地运行 PHP 函数并期望 node.js/socket.io/websockets 将通知推送到客户端。我只是不知道怎么去那里。

在此先感谢您提供任何示例/信息/指南。

4

2 回答 2

17

在这种情况下,我要做的是使用Socket.IO设置 Node.js 服务器。这为您提供了一种跨浏览器的方法,用于向客户端发送近乎实时的数据。

当客户端加载您的 PHP 页面时,您将有一个<script>标签指向您的 Node.js 服务器以加载 Socket.IO。加载后,Socket.IO JavaScript 客户端将连接到您的 Node.js Socket.IO 服务器并等待发出事件。

现在,由于您希望从 PHP 发送这些事件,因此您需要在 PHP 应用程序和 Node.js 之间建立一个通信通道。我建议为此使用 Redis pub/sub。基本上,您的 PHP 应用程序会发布一条消息,而您的已订阅该消息的 Node.js 服务器将接收该消息。然后,这些服务器可以立即将消息传递给客户端,以从 PHP 获取更多数据。(我想你会发现让你的 Node.js 服务器一开始就发送数据可能同样容易。)

如果你愿意,你可以将 Node.js 放在你的 Nginx 服务器后面,但是你需要最新最好的版本来支持真正的 web socket

于 2013-05-09T23:18:57.520 回答
0

这个问题很老,但我在尝试实现 websockets 时发现了它,所以也许这会帮助其他需要纯 PHP 解决方案的人,该解决方案可以集成到现有项目中,而无需过多修改。

棘轮 - PHP WebSockets

唯一的要求是 PHP 的 zmq 绑定,它被用作将数据从 PHP 脚本传递到 websocket 服务器的方法。如果你的 PHP 实例不是用它构建的,那么你可以在这里找到它

Github repo 在这里有很多例子可以帮助你前进

于 2018-02-27T20:40:24.297 回答