【问题标题】:Replacing AJAX calls with a better solution on a monitoring page在监控页面上用更好的解决方案替换 AJAX 调用
【发布时间】:2013-10-23 21:56:10
【问题描述】:

问题

我开发了一个相当复杂的项目,它使用 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 数据,然后对其进行处理)。

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

【问题讨论】:

  • 我想我可能刚刚找到了适用于这个特定应用程序的解决方案 - Pusher.com。刚刚偶然发现它,它看起来非常有前途。使用 Composer 在共享主机上快速安装,然后对其进行简单的 API 调用。客户端连接到他们的活动 websocket 并接收数据。手指交叉!
  • 是的,这看起来很有希望!希望它对于您需要的流量是免费的。

标签: php ajax node.js laravel websocket


【解决方案1】:

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

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

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

编辑:This library 您也可能感兴趣,尽管它看起来还不是超级稳定。

【讨论】:

  • 感谢您的帮助,该库将来会派上用场
【解决方案2】:

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

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

【讨论】:

  • 太棒了!如果这是您解决问题的方法,请确保将您的答案标记为正确,以便将来人们登陆这里时他们会知道。干得好:)
猜你喜欢
  • 1970-01-01
  • 2021-07-07
  • 1970-01-01
  • 1970-01-01
  • 2012-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-17
相关资源
最近更新 更多