0

问题

我开发了一个相当复杂的项目,它使用 PHP 和 Laravel 作为后端。该站点的用户标记可用或不可用以响应呼叫(如在调度中),并且呼叫存储在 MySQL 表中。现在,整个操作在一个共享的 web 主机上运行,​​Laravel 4 处理站点和传入数据(例如 Twilio 和 Iron.io 推送队列)。

客户希望在他们办公室的监视器上显示系统的状态 - 一台计算机和电视监视器专门用于此。系统需要实时或尽可能接近,显示谁有空以及任何正在进行的呼叫。根本不会有用户与这方面的交互——它只是整天坐在那里显示数据。

现在,我只是使用 AJAX 在他们网站上托管的页面上每六秒请求一次 JSON。他们的网络并没有意识到这一点,我猜我们的共享托管环境从长远来看可能不会喜欢它。我需要的是一种将数据直接发送到该计算机的方法,并且仅在某些内容发生更改且没有任何用户交互客户端的情况下才将其显示在页面上。这是我正在寻找的流程 -

  1. 用户更新他们的状态(即可用或不可用),
  2. Laravel 4 后端接收请求(从使用 POST 数据的三种可能方式之一),将其存储在数据库中,
  3. 客户端计算机接收此新信息并将其显示在 HTML 表中

我想到的解决方案

Node.js 安装在客户端计算机上,而 Socket.io 看起来很有希望接收推送数据。但是,我无法完全拼凑出如何将数据从 PHP Laravel 4 服务器端发送到客户端,只有在发生某些事情时(用户状态发生变化,调用被添加到系统)。

我似乎只能在处理诸如聊天室之类的事情的 websockets 上找到信息——这更像是“坐几个小时,直到事情发生”处理从 MySQL 中提取数据并将其推出的需要。

我还想过在 Heroku 上设置一个 websocket 服务器,然后从那里向客户端发送数据——但我再次陷入了关于如何仅在数据库发生更改时才完成发送数据的问题(即 Laravel 接收 POST 数据然后用它做点什么)。

任何想法将不胜感激。谢谢!

4

2 回答 2

2

我认为 websockets 绝对是要走的路。Node 非常擅长处理 websockets,但没有理由重写你的应用程序,你可以将 websockets 与 php 一起使用。我会查看像这样的 PHP websockets 库以进行集成。

websockets 的一般想法是,不是连接到服务器,而是让服务器传输数据,然后结束连接,使用 websockets 保持连接处于活动状态,并且即使在页面之后也有一个 javascript 接口来接收从服务器发送的消息已加载。所以在高层次上,你要做的是创建一个显示系统状态的页面,并将该页面的 javascript 连接到你将构建到你的应用程序中的 websockets 连接。然后在你的应用程序架构中,当用户更新他们的状态等事情发生时,你将通过 websockets 发送事件,并且页面将接收该事件并实时显示它。

我远不是 PHP 方面的专家,所以就具体的实现细节而言,我无法提供很多帮助,但希望这个和 php websockets 库的链接能让你走上正确的道路。似乎他们有非常好的文档,应该可以帮助您一路指导。我可以向您保证,为此使用套接字是可行的方法,并且比轮询解决方案要好得多。

编辑:这个库你也可能感兴趣,虽然它看起来还不是超级稳定。

于 2013-10-23T22:09:05.203 回答
0

完成并完成!Pusher.com 正是我所需要的,在几分钟内我过渡到它 - 问题完全解决了。幸运的是,这是一个非常低的活动项目,一个连接(我可以想象最多三个)并且每天只有几十个推送(如果有的话)。远低于他们的免费沙盒限制。

老板会很高兴的。;) 感谢您的回答,我今天学到了很多关于 websockets 的知识!

于 2013-10-23T23:39:56.223 回答