JavaScript来回运行程序

时间:2013-01-20 07:13:10

标签: php javascript ajax proc-open

问题

我试图看看我是否可以在服务器端运行的程序和客户端运行的JavaScript之间来回切换。程序的所有输出都发送到JavaScript以显示给用户,并且用户的所有输入都从JavaScript发送到程序。

让JavaScript接收输出并使用AJAX轻松完成输入。问题是我不知道如何访问服务器上已经运行的程序。

尝试

我尝试使用PHP,但遇到了一些我无法跨越的障碍。现在,我可以使用proc_open在没有任何问题的情况下使用PHP执行程序。我可以挂钩stdinstdout流,我可以从程序中获取输出并发送输入。但我只能这样做一次。

如果再次执行相同的PHP脚本(?),我最终会再次运行该程序。因此,无论程序首先多次写入stdout,我所能完成的多次执行都是如此。

现在,我在脚本中使用proc_open,该脚本应该只处理输入和输出,因为我不知道如何访问stdoutstdin的流已经运行的程序。我看到它的方式,我需要通过多次执行相同的PHP脚本来维护我的程序执行状态;维护proc_open返回的资源,并将pipes挂钩到stdinstdout个流中。

$_SESSION不起作用。我不能用它来维护资源。

有没有办法让这样的程序来回?任何帮助都非常感谢。

3 个答案:

答案 0 :(得分:3)

这听起来像是websockets

的工作

尝试http://socketo.me/http://code.google.com/p/phpwebsocket/

之类的内容

我总是使用Node来做这类事情,但是从上面的两个链接和其他几个链接看来,它看起来也有PHP的选项。

答案 1 :(得分:0)

可能有一种更有效的方法,但您可以让程序将其输出写入文本文件,并使用php读取该文本文件的内容。这样,您就可以访问正在运行的程序中的完整数据流。管理文件大小和处理来自多个客户端的请求存在问题,但这是一种可能足以满足您需求的简单方法。

答案 2 :(得分:0)

您再次运行相同的程序,因为它是PHP的工作方式。在您的情况下,客户端执行HTTP请求并运行脚本。第二个请求将再次运行脚本。我不确定是否可以进行持续交互,所以我建议让你的脚本能够处理离散事务。

为了计算相同“交互”的不同步骤,您必须在数据库中保存有关以前的数据。基本上,您需要为每个客户端提供一些唯一的哈希值,以便在脚本中识别它们,然后它将知道谁在执行请求,并且能够将来自一个用户的连续请求与不同用户的请求区分开来。

如果您的脚本很重并且运行了很长时间,请考虑制作两个脚本 - 一个重载,一个用于交互(AJAX将查询第二个)。在这种情况下,第二个脚本会将数据填充到数据库中,而重型脚本只是从那里获取它。