问题
我开发了一个相当复杂的项目,它使用PHP和Laravel作为后端。站点标记的用户可用或不可用于响应呼叫(如在调度中),并且调用存储在MySQL表中。现在,整个操作在共享Web主机上运行,Laravel 4处理站点和传入数据(例如Twilio和Iron.io推送队列)。
客户希望在办公室的显示器上显示系统的状态 - 计算机和电视监视器一直致力于此。系统需要实时或尽可能接近,显示可用的人员和正在进行的呼叫。根本没有用户与这方面的互动 - 它只是整天坐在那里显示数据。
现在,我只是使用AJAX在其网站上托管的页面上每六秒钟申请一次JSON。他们的网络没有意识到这一点,我猜我们的共享托管环境可能不会长期喜欢它。我需要的是一些将数据直接发送到该计算机并将其显示在页面上的方法,只有当某些内容发生变化且没有任何用户交互的客户端时。 这是我正在寻找的流程 -
我想到的解决方案
Node.js安装在客户端计算机上,Socket.io看起来很有希望接收推送数据。但是,如果发生某些事情(用户的状态发生变化,呼叫被添加到系统中),我就无法完全了解如何从PHP Laravel 4服务器端向客户端发送数据。
我似乎只能找到处理像聊天室这样的网页框的信息 - 这更像是“在发生某些事情之前坐了好几个小时”处理从MySQL提取数据并将其推出的需要。
我还考虑过在Heroku上设置一个websocket服务器,然后从那里向客户端发送数据 - 但是我又一次陷入困境,只是在数据库发生变化时如何完成发送数据(即Laravel)接收POST数据,然后用它做一些事情。)
任何想法都将不胜感激。谢谢!
答案 0 :(得分:2)
我认为websockets肯定是要走的路。 Node非常适合处理websockets,但没有理由重写你的app,你可以使用带有php的websockets。我会查看PHP websockets库,如this one进行集成。
使用websockets的一般想法是,不是连接到服务器,让服务器传输数据,然后结束连接,使用websockets保持连接活动,并且有一个javascript接口来接收从服务器发送的消息甚至页面加载后。所以在高层次上,您要做的就是创建一个显示系统状态的页面,并将该页面的javascript挂钩到您构建到应用程序中的websockets连接。然后在您的应用程序架构中,当用户更新其状态时,您会通过websockets发送事件,并且该页面将重新发送该事件并实时显示。
我远非PHP专家,所以就具体的实现细节而言,我无法提供很多帮助,但希望这个以及php websockets库的链接能让你走上正确的道路。他们似乎有really nice docs,它们可以帮助指导您。我可以向你保证,使用套接字是可行的方法,并且比轮询更好的解决方案。
编辑:This library也可能对你感兴趣,虽然它看起来不是很稳定。
答案 1 :(得分:0)
完成并完成!事实证明,Pusher.com正是我所需要的,在几分钟内我转变为它 - 问题彻底解决了。幸运的是,这是一个非常低的活动项目,一个连接(我可以想象最多三个),每天只有几十个推送(如果那样)。远低于他们的免费沙箱限制。
老板会很高兴。 ;)感谢您的回答,我今天学到了很多关于websockets的知识!