2013-01-20 47 views
1

問題JavaScript的來回運行的程序

我想看看我是否能對服務器端運行,在客戶端運行的JavaScript程序之間的來回。程序中的所有輸出都發送到JavaScript以顯示給用戶,並且用戶的所有輸入都從JavaScript發送到程序。

讓JavaScript接收輸出併發送輸入很容易通過AJAX完成。問題是我不知道如何訪問服務器上已經運行的程序。

嘗試

我試圖使用PHP,但遇到了一些障礙,我不能跳過。現在,我可以用PHP執行程序,沒有任何問題,使用proc_open。我可以連接到stdinstdout流,我也可以從程序獲得輸出併發送輸入。但我只能做一次。

如果再次執行相同的PHP腳本(?),我最終再次運行該程序。因此,我從多次執行中得到的所有內容都是程序首次多次寫入stdout的任何內容。

現在,我在這是應該只需要輸入和輸出的小心,因爲我不知道如何訪問一個已經運行的程序的stdoutstdin流腳本中使用proc_open。我看到它的方式,我需要通過多次執行相同的PHP腳本來維護我的程序執行狀態;保持由proc_open返回的資源和掛鉤到stdinstdout流中的pipes

$_SESSION不起作用。我不能用它來維護資源。

有沒有辦法讓程序有這樣的來回?任何幫助真的很感激。

回答

3

這聽起來像websockets

試着這麼做http://socketo.me/http://code.google.com/p/phpwebsocket/

我一直使用節點爲這種類型的事情了一份工作,但是從上面的兩個鏈接和其他幾個人,它看起來就像有PHP的選項一樣。

+0

他提到他可以使用ajax進行客戶端/服務器通信。我認爲他正在尋找一種服務器端語言(比如php)與一個持續運行的過程「程序」進行交流的方式,他已經用proc_open之類的東西觸發了它。 當然,所有的邏輯也許可以用websocket或comet解決方案替代 - 但聽起來他想和另一個在服務器上運行的進程「交談」...... –

0

可能有更高效的方法來做到這一點,但你可以讓程序將其輸出寫入文本文件,並用php讀取該文本文件的內容。這樣你就可以訪問正在運行的程序中的全部數據。在管理文件大小和處理來自多個客戶端的請求方面存在問題,但這是一種簡單的方法,可能足以滿足您的需求。

0

您正在運行相同的程序,因爲這是PHP的工作方式。在您的情況下,客戶端執行HTTP請求並運行腳本。第二個請求會再次運行腳本。我不確定是否可以進行連續交互,所以我建議讓腳本能夠處理離散事務。

爲了確定相同「交互」的不同步驟,您必須在數據庫中保存有關以前數據的數據。基本上,您需要爲每個客戶端提供一些獨特的散列,以便在您的腳本中識別它們,然後它將知道是誰發出了請求,並能夠根據來自不同用戶的請求從一個用戶發出連續請求。

如果您的腳本很重並且運行很長時間,請考慮製作兩個腳本 - 一個用於交互(AJAX將查詢第二個腳本)。在這種情況下,第二個腳本會將數據填充到數據庫中,重腳本將從此處獲取數據。