2012-07-23 107 views
1

我有一個C模擬,我正在創建一個圖形化的Web界面。我用ajax來調用PHP,然後調用shell來運行模擬。輸出然後傳回到網頁。PHP調用shell腳本來處理多個用戶

腳本會生成一個輸出文件(帶有輸出到網頁的鏈接)以及一個圖形(使用調用gnu plot並引用輸出文件)。該網頁還允許用戶上傳用於C仿真的輸入文件。所有這些文件都是用戶特定的。

如果一次只有一個用戶在網頁上,沒有任何問題。但是,如果有5個人想要同時運行模擬,用戶特定的文件(輸出,圖形,輸入)將被覆蓋並混亂。

我沒有任何MySQL的經驗,我也不打算保存給定用戶的輸出或輸入(用戶可以下載他們,如果他/她願意),所以我希望可能有一個相當簡單的解決方案,例如,在服務器上生成一個臨時目錄,並根據用戶的IP地址或名稱在名稱中添加某種標識標籤。這個文件夾可以在模擬運行幾分鐘後被刪除。任何人有任何關於這樣的想法?或者我會不得不求助於MySQL?

編輯:也可以讓最多5個用戶同時運行,然後爲其他用戶創建一個隊列,但這可能會更困難。

感謝, 喬希

+0

如果您發送鏈接到輸出回到用戶,不應該輸出存在更長,然後幾分鐘?也許是 – hackattack 2012-07-23 19:36:40

+0

。輸出包含一個數字(三維數值積分的結果),一個包含分佈(積分範圍內的較小範圍)的文件和一個圖形。輸出只在下載格式中非常有用,所以我想用戶會抓住它或不想要它。但「幾分鐘」只是一個例子。 – jroz 2012-07-24 16:39:41

回答

2

你不能沒有保存輸出某處,所以你的臨時目錄計劃是好的。

  • 通過md5()或sha1()或其他方式爲每個新用戶分配一個唯一的ID。
  • 將id傳遞給模擬器,並讓它在由該id命名的子目錄中創建其輸出文件。
  • 根據該ID渲染鏈接和映像HREF ..
  • 編寫一個cron以定期清除陳舊的子目錄。

每個人都會在一個不可猜測的URL上獲得他們自己的輸出集。

+0

這正是我所想的,甚至直到使用cron來清除目錄。我只是想確保我走在正確的道路上。我也不是很瞭解session id,所以md5()和sha1()是開始我的谷歌搜索的好地方。 – jroz 2012-07-24 16:42:49

+0

呵呵,我不會說這是「正確」的道路,只是衆多可能之一。 – 2012-07-24 16:56:50

1

也許你可以在你的C模擬使用Threading。或者,您可以設置一個MySQL數據庫並使用PHP Database Objects (PDO)將數據存儲在那裏。如果你可以使用C並且能夠使用PHP來做Ajax,那麼mysql可能是最具時間效率的解決方案,而不是C中的線程(假設C仿真比較複雜)。

1

您可以爲訪問用戶創建會話標識並將該ID作爲參數傳遞給您的c程序。

當您的c程序創建文件供用戶顯示時,它應該使用該用戶的會話標識符生成名稱。

從網頁上讓用戶查看與其會話標識符相匹配的文件。通過這種方式,他們可以看到他們生成的文件,並且如果用戶擁有帶有會話標識符的文件,則不需要對C程序進行不必要的調用,就可以對用戶進行控制。

只是爲已經創建的那個服務。根據您的需要控制該標識符的使用壽命。