2012-02-27 13 views
2

私は、tclシェルを使ってインタラクティブなクエリをサポートするツールを持っています。私は、ユーザーがツールに異なるクエリを送信できるWebアプリケーションを作成したいと思います。私はApache WebサーバーとCGIスクリプトを使っていくつかの基本的なプログラミングを行ってきましたが、シェルを存続させてクエリを送信する方法は考えられません。tcl shell through apache

さらに詳しい情報:

さらに詳しく説明します。ツールは、特定のノードのすべての子ノードを取得するような、tclシェルを使用して情報を問い合わせることができます。ビルドには多くの時間がかかるため、すべてのクエリでデータ構造を構築することはできません。私は、データ構造を構築し、何とかシェルを生き生きとしたままにしたい。 Apacheサーバーはすべてのクエリをそのシェルに送信し、応答をユーザーに返します。

答えて

1

ツールに関する正確な意味を指定していないので、質問は不完全なようです。

どのように対話型クエリをサポートしていますか?それは無限ループの一種でgetsを呼び出し、読み込まれるごとに各行を処理しますか?もしそうなら、あなたの問題に対する解決策は簡単です。Tclシェルは、標準入力が対話型端末に接続されているかどうかに本当に関心がありません。 CGIリクエスト処理コードでツールを起動し、そのプロセスのstdinストリームにユーザのクエリを書き込んで、にフラッシュし、そのプロセスが書き込んだすべてのテキストをstdoutストリームとstderrストリームに読み込みます。その後、それらをブラウザに送り返します。どのようにしてプロセスを生成し、その標準ストリームを介してプロセスと通信するかは、CGIコードに大きく依存します。

あなたのアイデアを取得しない場合は、ファイルにクエリを書いてみた後、

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

ようcomethingんし、通常の方法で対応するツールを持っている必要があります。

あなたのツールで他の方法でインタラクションが実行されている場合は、そのコアを「コア」と「フロントエンド」の部分に分割して、コアがクエリを読み込んで結果を出力するようにする必要があります。終わりの部分は相互作用を行う。次に、上で概説した方法で、そのコアをCGI処理コードに接続します。

+0

質問に多くの情報が追加されました – SAN

2

おそらくexpectを使って、対話型プログラムを生成するデーモンプロセスを作成することができます。デーモンプログラムは、Tclのsocketコマンドを使用してTCP経由のクエリを聞くことができます。あなたのCGIプログラムは、daemopnと通信するためのクライアントソケットを作成します。

2

私はグラフ管理プログラムを小さなウェブサーバ(例えば、tclhttpdだがこれだけではないが)を実行しているインタプリタに埋め込み、RESTfulなウェブアクセスを通じて世界の残りの部分をグラフとやりとりさせる。これは、Apacheの後ろにあなたが好きな方法で統合することができます - CGIサンクが動作するか、リクエスト転送を行うことができますか、それを行うためのサーバサイドのコードを書くことができます(そこにはたくさんのオプションがあります)クライアントに直接接続させるだけです。多くのオプションが機能します。

+0

FWIW、私のプロジェクトの1つでこのようなことをするには、約1時間の手間がかかりました。 (私はWibbleという組み込み可能な別のWebサーバーを使用していましたが、Tcl 8.6がまだベータ版であるため、他のユーザーにとっては完璧な選択ではありません)。 –