将Node.js(用于实时通知)添加到现有PHP应用程序

gor*_*dyr 20 php apache node.js

我有一个现有的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将通知推送到客户端.我根本不知道如何到达那里.

提前感谢任何示例/信息/指南.

Bra*_*rad 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插槽.

  • @ user346665这当然是一个选项,但你实际上是用pub/sub重新发明了这个轮子,然后你必须管理一个上/下的服务器列表,并处理你的PHP脚本正在运行的事实挂起(除非你使用multicurl,这是一个真正的麻烦这样的事情). (2认同)