2012-05-07 17 views
2

私は、ProcessBuilderを使用して複数のプロセスを作成するテストハーネスで構成されるシミュレーションシステムを作成しています。私は、別々のプロセスに複数のコマンドを送信できるようにしたいと思います。私は2つのオプションを考えました。どちらも非常に面白くないようです。サブプロセスにコマンドを送信する方法

最初の方法は、サブプロセス間の通信方法であるソケットを使用して、親プロセスとサブプロセス間で通信する方法です。もう1つはWriterメソッドを使用することです.Readメソッドを使用して、各プロセスからの入力ストリームを読み込んで印刷しています。私はこれらの両方が同様のレベルの簿記を必要とすると思う。理想的には、どのようなサブクラスでも同じように関数を呼び出すことはいいですが、マルチプロセスの仕組みではないことがわかります。

これを実装する最善の方法は何だと思いますか教えてください。

おかげで、 デビッド

アップデート:私は、サブプロセスのすべてと通信をテストハーネスでサーバソケットを作成することになりました。システムが設定されると、メッセージをキューに追加するだけで簡単に実行され、正しいクライアントに送信されます。

+1

私には、あなたが到達したいことは明確ではありません。 Javaで複数のスレッドを生成することができ、各スレッドはサブプロセスを開始できます。たぶんあなたはサブプロセスを必要としないかもしれませんが、Javaで完全に行うことができますか? –

+0

3つの別々のコンピュータで実行されるシステムをシミュレートしているので、別々のプロセスにする必要があります。 –

答えて

2

この答えは、あなたの文に対応している:すべての サブクラスのために理想的に、あなたのような関数を呼び出すことがいいだろう」

だろうが、私はどのようにマルチプロセスの作品だけではないことを知っています"

あなたがしたい場合は、ここにあなたが実際にサブプロセスは、JVM上で動作するJavaプログラムであれば、それを行うことができる方法である。

使用Remote Method Invocationwikipedia articleには、RMIサーバーとクライアントの小さな例があります。本質的には

この次のように動作します。

  1. サーバーは、(その定義もクライアント利用可能であるべきである)「リモートインタフェース」を実装することによって、リモートメソッドを経由して、いくつかのサービスを提供してい
  2. サーバが起動すると、サービスを実装するオブジェクトのインスタンスが作成され、「RMIレジストリ」にバインドされます。
  3. クライアントは、リモートオブジェクトの「RMIレジストリ」を探しますメソッドを呼び出して、そのメソッドを実装するように見えるオブジェクトを取得します。リモートインタフェース。
  4. クライアントはこのオブジェクトのメソッドを呼び出すことができ、RMIランタイムはその呼び出しがリモートオブジェクトにそれを確実に渡し、結果を返します。

これが「公式」のHello Worldの例のようです: http://docs.oracle.com/javase/1.5.0/docs/guide/rmi/hello/hello-world.html

(彼らはネットワークを介して送信することができるように)呼び出しの引数はSerializableでなければなりません。通常、これは型定義にimplements Serializableを追加するのと同じくらい簡単です。

+0

比較的初心者のプログラマとして、これはすべてかなり複雑に思えます。このコンセプトはうまくいくかのように聞こえますが、これが私の答えかどうか判断するにはしばらく時間がかかるかもしれません。 –

+0

@DavidK - 本質的に、RMIはすべての「プロセス間通信」を抽象化して、(ある種の設定の後で)「リモート」のJVM上の「リモート」オブジェクトをローカルオブジェクトのように呼び出すことができます。私がこの答えを投稿した理由は、あなたが単に「関数を呼び出す」という好みを表現したからです。それはあなたの問題のための最良の方法かもしれません。 – ArjunShankar

関連する問題