我有一个现有的PHP应用程序,我需要向其添加实时通知。为了实现这一点,我已经安装了node.js(打算添加套接字)。IO用于所有实时功能)
然而。尽管我花了三个小时研究并试图弄清楚如何将两者结合起来,但我发现自己并没有更接近于获得理解。
我目前正在使用以下内容:
- Apache PHP
- Nginx(作为Apache所有静态内容的反向代理,如图片/css文件等) MySQL
我已经写了代码,从客户端发送一个事件到PHP,并插入一个通知到数据库中。当接收者刷新页面时,他们当然会看到通知。我只需要node.js来处理实时推送到客户端,但我在如何去设置它的损失。
在这种情况下,我真正需要知道的是:
- 如何/何时实例化到客户端的node.js/websocket连接,给定我希望所有的内容仍然通过Apache/PHP服务? 如何从PHP发送消息到Node.js并指示它推送通知客户端?
- 为了支持这一点,我需要对我的设置进行什么样的后端修改?
最终我想简单地能够运行一个PHP函数,并期望node.js/socket。Io/websockets将通知推送到客户端。我只是不知道怎么去那里。
提前感谢任何例子/信息/指南。
在这种情况下我要做的是用Socket.IO设置一个Node.js服务器。这给了你一个跨浏览器的方法来发送接近实时的数据到客户端。
当客户端加载PHP页面时,您将有一个指向Node.js服务器的<script>
标记来加载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套接字。
这个问题已经很老了,但是我在尝试实现websockets时发现了它,所以也许这将帮助那些需要一个纯PHP解决方案的人,这个解决方案可以集成到一个现有的项目中,而不需要太多的黑客攻击。
棘轮PHP WebSockets
唯一的要求是PHP的zmq绑定,它被用作将数据从PHP脚本传递到websocket服务器的方法。如果你的PHP实例不是用它构建的,你可以在这里找到它
Github的repo在这里,很多例子让你在这里