1

问题

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

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

尝试

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

如果再次执行相同的 PHP 脚本(?),我最终会再次运行该程序。因此,我从多次执行中得到的只是程序stdout首先多次写入的内容。

现在,我proc_open在应该只处理输入和输出的脚本中使用,因为我不知道如何访问已经运行的程序的stdoutstdin流。在我看来,我需要在同一 PHP 脚本的多次执行中保持程序的执行状态;维护返回的资源proc_openpipes连接到stdinstdout流中。

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

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

4

3 回答 3

3

这听起来像是websockets的工作

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

我一直将 Node 用于这种类型的事情,但从上面的两个链接和其他一些链接来看,似乎 PHP 也有选项。

于 2013-01-20T07:17:23.063 回答
0

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

于 2013-01-20T07:22:58.520 回答
0

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

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

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

于 2013-01-20T07:50:31.123 回答