2013-05-09 100 views
20

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

但是,尽管花费了最近三个小时的研究,并试图让我的头脑如何整合这两者,但我发现自己并没有接近取得理解。

我目前使用下列内容:

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

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

我真正需要知道的,因为这种情况下,如下:

  1. 如何/时,给出 ,我希望所有的内容仍然Node.js的/ WebSocket连接到实例化的客户端,通过Apache/PHP提供服务?
  2. 如何从PHP向Node.js发送消息并指示它将 通知发送给客户端?
  3. 为了支持我需要对我的设置进行哪种后端修改?

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

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

+0

1.当客户端请求它; 2. [通过HTTP](http://stackoverflow.com/questions/10048978/sending-messages-from-php-to-node-js); 3. [设置nginx](http://stackoverflow.com/questions/5009324/node-js-nginx-and-now)。 – 2013-05-09 23:19:57

回答

17

我在这种情况下会做的是建立一个与Socket.IO的Node.js服务器。这为您提供了一种用于向客户端发送近实​​时数据的跨浏览器方法。

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

现在,由于您希望从PHP发送这些事件,因此您需要PHP应用程序和Node.js之间的通信通道。我为此推荐using Redis pub/sub。基本上,您的PHP应用程序发布消息,并且已订阅它的Node.js服务器将收到它。这些服务器可以立即将消息传递给客户端,以从PHP获取更多数据。 (我认为你会发现虽然你的Node.js服务器可能只是简单地发送这些数据)

如果你愿意,你可以把Node.js放在你的Nginx服务器后面,but you need the latest and greatest version for true web socket support

+1

这听起来很完美,尤其是因为我已经在使用Redis来构建活动流。关于使用脚本标签的部分就像一个灯泡熄灭。到底是什么我以后。非常感谢。 – gordyr 2013-05-09 23:22:01

+0

而不是使用Redis的PHP和Node.js的之间的沟通渠道,你想想,卷曲从PHP发送请求到Node.js的应用程序是什么?接下来,在Node.js应用程序的请求事件中,我们将向连接的套接字发送数据/通知。 – user345602 2014-01-19 00:48:55

+2

@ user346665这当然是一种选择,但你有效地重新发明了与发布/订阅的车轮,然后你就必须要管理上/下的服务器列表,并处理的事实,你的PHP脚本去挂(除非你使用multicurl这是一个真正的麻烦这样的事情)。 – Brad 2014-01-19 00:50:31

0

这个问题是旧的,但我发现它时,我想实现的WebSockets所以也许这将帮助别人谁需要它可以集成到现有的项目中没有太多的黑客围绕纯PHP解决方案。

Ratchet - PHP WebSockets

唯一的要求是ZMQ对于PHP,这是用来作为方法从PHP脚本数据传递到您的WebSocket服务器绑定。如果你的PHP实例没有与它内置然后你可以找到它here

Github上回购是here,大量的实例让你去是here

相关问题