2012-05-21 48 views
0

之间的开放过程中,我有我需要使用一个PHP网页交互的计算终端程序。我可以使用getRuntime()。exec(...)在JAVA中执行此操作,然后创建读取和写入流程的管道,并且该流程将在请求之间存在。但我不确定是否可以用PHP来完成,因为我不认为proc_open在请求期间保持进程活着?PHP和保持它打开请求

这里是我创建网页的流量。首先,用户将在网页上输入一个命令,该命令将被输入执行计算的终端程序,然后将答案返回给用户。我将为请求使用AJAX,以便在不刷新页面的情况下返回答案。

现在我的问题是,我需要对下一个请求相同的流程交互,而不是开始一个新的。这是因为终端程序有状态。这就是我可以在里面设置变量这样的 - X = 5;

所以在我的第一个AJAX调用程序我通过

X = 5;

,并从程序的输出返回给用户的浏览器 -

X = 5

然后在我的下一个AJAX请求我通过

Y = X + 5;

,然后程序应该得到它传回给用户的浏览器输出

Y = 10

但它是我的理解中的proc_open功能不请求之间保持状态。我知道当服务器响应用户的请求时,这个过程是关闭的。它是否正确?如果是的话,有什么办法可以做我需要做的事情吗?

回答

1

你会想看看$_SESSION秒。由于PHP没有维护状态会话的概念,因此您可以将请求中的信息传递给请求。

+0

是的,但它不是我为每个请求创建新进程的选项。我必须使用最初创建的相同流程。我的理解是,proc_open会为请求打开一个进程,然后在请求结束时关闭该进程? –

2

使用PHP会议。看到这里:http://php.net/manual/en/book.session.php

基本上,服务器将向浏览器发出一个cookie标识符,并创建一个对象变量$_SESSION,可以容纳任何你想要的。浏览器每次向服务器显示cookie时,服务器都会检索该会话的变量$_SESSION,以便您的PHP脚本可以访问该变量。

1

如果只是存储使用会话的概念值是不够的,而这个终端程序确实需要继续运行:

写守护程序(在PHP或Java或任何你喜欢)。这个程序应该在本地套接字上监听连接,并为每个客户端维护一个终端程序实例。你的php脚本只需将本地套接字连接到这个守护程序,发送一个id来标识哪个终端实例正在继续,然后你就可以发送命令并获得响应,守护进程只是作为终端的代理/管理器实例。