2012-02-27 72 views
2

我有一個工具,它支持通過tcl shell進行交互式查詢。我想創建一個Web應用程序,用戶可以通過該應用程序向工具發送不同的查詢。我已經使用Apache web服務器和cgi腳本完成了一些基本的編程,但我無法想出一種方法來保持shell活着併發送查詢。tcl shell通過apache

一些更多的信息:

讓我來描述一下。在構建用戶可以使用tcl shell查詢信息之後,工具構建圖形數據結構,類似於獲取特定節點的所有子節點。我無法爲每個查詢構建數據結構,因爲構建需要大量時間。我想構建數據結構,並以某種方式保持shell活着。 Apache服務器應將所有查詢發送到該shell並將響應返回給用戶

回答

1

由於您沒有詳細說明「交互式」與工具有關的含義,因此該問題似乎並不完整。

它如何支持交互式查詢?它是否在一種無限循環中調用gets,並在讀取每行時處理每行?如果是這樣,你的問題的解決方案很簡單:Tcl shell並不關心它的標準輸入是否連接到交互式終端。因此,只需在CGI請求處理代碼中生成工具,將用戶的查詢寫入該進程的標準輸入流,將其刷新爲,然後將該進程寫入的所有文本讀取到其stdout和stderr流。然後將它們發送回瀏覽器。如何產生流程並通過其標準流與它進行通信很大程度上取決於您的CGI代碼。

如果你不明白我的意思,嘗試寫你的查詢到一個文件,然後做comething像

$ tclsh /path/to/your/tool/script.tcl </path/to/the/query.file 

,你應該有一個通常的方式來回應工具。

如果在您的工具中使用其他方式進行交互,那麼您可能必須將其分解爲「核心」和「前端」部分,以便核心可以讀取查詢並輸出結果,而前端結束部分進行交互。然後以上述方式將該核心連接到CGI處理代碼。

+0

在問題 – SAN 2012-02-27 15:34:22

2

您可能想要創建一個守護程序進程,或許使用expect來生成您的交互式程序。守護進程程序可以使用Tcl的socket命令來偵聽TCP上的查詢。您的CGI程序會創建一個客戶端套接字來與daemopn進行對話。

2

我會將圖形管理程序嵌入到也運行小型網絡服務器的解釋器中(例如,tclhttpd,儘管這不是唯一的選擇),並讓世界其他地方通過RESTful網絡訪問與圖形進行交互。然後,這可以以任何你喜歡的方式集成到Apache後面 - 一個CGI thunk可以工作,或者你可以請求轉發,或者你可以編寫一些服務器端代碼來做到這一點(這裏有很多選項!) - 或者你甚至可以只是讓客戶直接連接。許多選項都可以工作。

+0

中增加了更多信息FWIW,花了我大約一個小時的修補才能在我的一個項目中獲得這樣的事情。 (我正在使用另一個名爲Wibble的嵌入式Web服務器;雖然它不是其他嵌入式Web服務器的完美選擇,但它依賴於Tcl 8.6,它仍然是測試版。) – 2012-02-27 22:05:51