2012-05-21 71 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來標識哪個終端實例正在繼續,然後你就可以發送命令並獲得響應,守護進程只是作爲終端的代理/管理器實例。