2012-03-22 13 views
2

私は現在、3D描画アプリケーション用のRubyプラグインを作成しています(C++で書かれており、Rubyはスクリプト言語です)。 私がしたいことは、javaとjavaで書かれた別のアプリケーションとの間で通信することです。どちらのプログラムも同じコンピュータ上で実行されています。 3次元描画アプリケーションに統合されているRubyのバージョンは、むしろ、かなり基本的なものであり、私が理解しているところからかなり限られているか、存在しないソケットライブラリがあります。ruby​​とjavaの間の通信

2つのアプリケーション間で情報を交換する方法についてのアイデアは大変ありがたいです。

交換される情報の量はかなり少なくなります。ない高いパフォーマンスが必要な場合は

+1

ソケット、ファイル、データベース... –

答えて

2

あなたの質問には多くの方法があります。非常に多くの可能な解決策は...あり

最も簡単なの一つ、と私の心に来るまだかなり効率的な方法は、(任意の言語で書かれた)プログラム間の通信にstandard input and standard output redirectionを使用することです。

あなたのJavaプログラムは、入出力ストリームをリダイレクトするRubyプログラムを実行する必要があります。私はこの作業のためにJavaで使用される関数を知らないが、RubyではメソッドはIO.popen(command,mode)である。この方法と呼ばれる

あなたのRubyプログラムは、ちょうどSTDINから読み込み、STDOUT(無地方法getsputsを使用することができる)に書き込みます。

は、あなたがプログラミングしているどのようなシステム上で言っていないので、私はあなたのプラットフォームは、このようなリダイレクト、またはnames pipes(だろう第二簡単な解決策)を扱うことができるかどうかを確認していません。

+0

WindowsとMac OS.Iは正直なところ、私はプログラミングに関しては自分自身を教えているので、シェル、パイプなどの知識は基本的には存在しません。 rubyやjavaのどちらかに新しい情報が作成されたことを知らせるコマンドライン経由で、テキストファイルやメモリに情報を出力することを考えています(おそらく正しい言葉ではないでしょう)。 – BMac

+0

私はあなたが何を意味するか分かりませんが、私の提案はコマンドライン_parameters_に関するものではありません。 1つのプログラムは別のプログラムを開始します。そして、1週間以上の間、おそらく一緒に作業します。技術的に私の解決策は、ファイルを介して情報を交換するのと同じようなものですが、そのファイルの名前について考える必要はありません。ファイルシステムにファイルを作成することは良いアイデアですが、「常に成長する」ファイルで何をすべきかを決める必要があります。そして私はあなたが独学で教えているのが好きです;-) – Arsen7

0

、次の2つのアプリケーション間での情報を変更するには、コンピュータのディスク上のファイルを使用することができます をたとえば、あなたはJavaアプリケーションにRubyのアプリからEVENT1を転送する場合:。 Rubyのアプリが書き込みディスクのディレクトリにevent1.flagという名前のフラグファイルを作成し、JavaアプリケーションはTheadで.flagファイルのディレクトリを検索し続けます。

関連する問題