PHP -如何启动对另一个页面的多个请求,在请求完成时获取结果,并显示在原始页面上


PHP - How to kick off multiple requests to another page, get results as requests are completed, and display on original page?

我有一个小的php web应用程序,我把一些繁琐和耗时的手动过程自动化。该应用程序基本上是一个GUI, ssh出来,并根据源代码控制的原子更改"安装"软件到目标机器(如果有关系的话)。该应用程序目前在一个新的弹出窗口中启动每次安装。假设我在10台不同的机器上安装软件,我得到10个不同的弹出窗口。这有点太过分了。要启动这些过程并将结果显示在一个页面上,我有哪些选项?

我想我可以有一个弹出窗口,动态创建div的每一个安装,我正在启动,并做一个ajax调用,然后在相应的div中显示每个安装的输出。唯一的问题是,我不知道我如何可以踢这些进程并行。如果我要等每个人都出去,做自己的事,然后把结果吐出来,那就太花时间了。我正在使用jQuery,如果它有帮助的话,但我主要是在寻找高级架构的想法。代码示例是受欢迎的,但是psuedo代码就可以了。

我不知道你有多先进,甚至你是否有root访问你的服务器,这将是必需的,但这是一种可能的方法。它使用了几种不同的技术,可能更适合大规模应用程序,而不是小型应用程序。但我还是会给你建议的。

使用了以下技术/堆栈(除了您提到的PHP):

  • WebSockets(基于node.js)
  • JSON-RPC Server(在node.js内)
  • Gearman

你要做的是,从你的客户端(所以通过JavaScript),当页面加载时,通过WebSockets与node.js建立连接),你可以使用socket之类的东西。

然后当你决定你想做一个任务,(这可能需要很长时间…)你发送一个请求到你的服务器,这可能是一些JSON编码的原始体,或者它可能只是一个简单的GET /do/something。重要的是接下来会发生什么。

在服务器上,当收到作业时,通过向服务器添加Task,向Gearman启动一个新作业。然后,这将处理您的任务,并且它将是一个非阻塞请求,因此您可以立即响应发出请求的客户端,说"嘿,我们正在处理您的任务"。

然后,拥有所有Gearman工人的服务器接收到作业,并开始处理它。这可能需要5分钟,为了方便讨论。一旦完成,worker就会发送一个JSON编码的消息给你的node.js服务器,该服务器通过JSON-RPC接收它。

获取消息后,它可以通过websockets将事件发送给需要了解它的任何连接。

我曾经需要这样的项目,并设法在一天内学习node.js的基础知识(已经有很强的JS背景)。第二天,我完成了一个完整的推送/拉消息工作通知平台。