2010-10-12 172 views
6

我正在嘗試創建一個將從系統獲取輸入的Web應用程序。使用哪種語言的建議

這個應用程序應該做的是偵聽一些shell腳本正在執行並通過web報告狀態時會發生什麼。

一個例子:

  • 我複製數千種shell腳本記錄,而這仍是執行我想劇本的當前狀態傳遞到Web界面。從shell腳本中,我可以回顯「文件正在複製請等待它芬蘭語」。

從殼側使用哪種編程語言將是最簡單的方法將其傳遞到Web界面?我打算使用JSP/JAVA for web。

這是甚至正確的方式來思考這個問題嗎?每一個建議是歡迎

編輯

會像http://nodejs.org/是這個有用嗎?

回答

5

我會使用命名管道(FIFO)來代替。您只需將輸出寫入管道並讓應用程序讀取它即可。我不確定是否有其他方式可以獲得比這更多的實時系統。

我推薦Perl作爲後端。

編輯:

命名管道是一種特殊類型的UNIX文件。縮寫FIFO代表「先進先出」。在LINUX Journal上你可以找到一個有趣的read about named pipes

Perl是一個非常強大的腳本語言,有許多隨時可用的模塊,您可以在http://cpan.org上找到。你可以在SO上找到一些答案here關於如何/從哪裏開始學習Perl。

+0

我沒有perl的perl,我願意學習,你能澄清一點你的答案。也許提供一些鏈接 – London 2010-10-12 13:58:08

+0

@倫敦:編輯我的答案與更多的信息。 – 2010-10-12 14:22:38

0

您可以將shell腳本輸出放到服務器上的某些存儲中。在網頁上使用AJAX來輪詢服務器並從該存儲獲取更新到頁面。

如果您決定使用JSF進行網頁創建,我可以推薦ajax2jsf庫中的「a4j:poll」組件。它非常簡單直接。從網頁中輪詢服務器的非常簡單的方法。

+0

如何知道服務器上的存儲是否發生更改,並且我需要將其他信息傳遞給前端,每隔幾秒發送一次jax請求?我想盡可能地讓這個活動成爲現實 – London 2010-10-12 12:52:36

+0

@倫敦,是的,你可以每隔幾秒發送一次你需要的頻率的AJAX請求。 – 2010-10-12 13:01:02

+0

這不會重新加載整個頁面。只有頁面的一部分會被Ajax不斷更新 – 2010-10-12 13:02:40

2

您的應用程序的Web部分可以輕鬆讀取文件或數據庫,因此您只需確保shell腳本正在輸出用於更新Java代碼的內容。

例如,如果你在你的Java代碼運行shell腳本這樣

./myscript.sh > mylog.log 

然後(請注意,你不應該有邏輯在你的JSP),你可以在文件中讀取,以確定狀態的更新,並將結果輸出到您的JSP。

從數據庫中讀取數據會更好,但會涉及到更改shell腳本以將數據輸出到數據庫。

+0

我希望腳本更新儘可能生動,不確定如何處理日誌,如何知道腳本是否已轉移到下一個東西,我是否應該每隔幾秒讀取一次日誌文件? – London 2010-10-12 12:51:01

+0

這將是我會這樣做的方式。如果您希望腳本將數據推送到網頁,則可以在服務器上運行Java程序,檢查日誌文件的更新,然後向您的Web應用程序發送請求(Web服務請求,套接字請求或甚至更新一個數據庫,讓你的服務器定期輪詢數據庫)通知它的變化 – Codemwnci 2010-10-12 12:56:13

+0

現在點採取+1,謝謝你的回答我會看看別人說什麼更長。 – London 2010-10-12 13:09:48

0

寫入日誌文件將是最簡單的解決方案。而在編程中,簡單通常意味着好。

如果您確實需要非常快速/實時的系統,您應該將這些日誌作爲數據庫。

至於語言,使用你最喜歡的。他們都支持SQLite,包括bash。

0

如果我正確理解您的問題,您希望在客戶端計算機上顯示一個報告服務器計算機上長時間運行任務狀態的網頁。如果是這種情況,那麼你需要關注一些叫做AJAX IMO的東西。

對於我所知道的最簡單,最容易理解的AJAX實現是Apache Wicket