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

时间:2011-12-20 21:26:45

标签: php ajax ssh

我有一个小的php网络应用程序,我把它放在一起,以自动化一些单调和耗时的手动过程。该应用程序几乎是一个GUI,ssh出来并“安装”软件,以基于来自源代码控制的原子变化#来定位机器(如果重要的话,那就是perforce)。该应用程序目前在新的弹出窗口中启动每个安装。所以,假设我在10台不同的机器上安装软件,我会得到10种不同的弹出窗口。这太过分了。我可以选择关闭这些流程并在一个页面上显示结果吗?

我想我可以有一个动态创建div的弹出窗口,用于我开始的每个安装,并为每个安装执行ajax调用,然后在相应的div中显示每个安装的输出。唯一的问题是,我不知道如何将这些进程并行关闭。如果我不得不等待每一个人走出去,做到这一点,并将结果吐回来,这将花费太长时间。我正在使用jQuery,如果它有帮助,但我主要是寻找高级架构的想法atm。代码示例是受欢迎的,但psuedo代码就可以了。

1 个答案:

答案 0 :(得分:0)

我不知道你有多高级,或者即使您对服务器有root访问权限,但这是一种可能的方式..它使用了几种不同的技术,可能适合大规模使用应用而不是小。但无论如何我会建议你。

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

  • WebSockets(在node.js之上)
  • JSON-RPC服务器(在node.js内)
  • 的Gearman

你会做什么,来自你的客户端(所以通过JavaScript),当页面加载时,通过WebSockets与node.js建立连接)你可以使用像socket.io这样的东西。) p>

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

在您的服务器上,当收到作业时,您通过向服务器添加任务来启动Gearman的新工作。然后处理您的任务,这将是一个非阻塞请求,因此您可以立即回复发出请求的客户说“嘿,我们正在处理您的工作”。

然后,您的服务器与所有Gearman工作人员一起接收作业,并开始处理它。这可能需要5分钟让我们说出来。完成后,工作人员会生成一条JSON编码消息,并将其发送到您的node.js服务器,该服务器通过JSON-RPC接收它。

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

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