2

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

最初の方法は、ソケットを使用して親プロセスとサブプロセスの間で通信することです。これは、サブプロセスが相互に通信する方法です。もう1つは、Writerメソッドを使用することです。私は、Readerメソッドを使用して、各プロセスからの入力ストリームを読み取って印刷しています。どちらも同じレベルの簿記が必要だと思います。理想的には、他のサブクラスの場合と同じように関数を呼び出すとよいでしょうが、マルチプロセスがどのように機能するかではないことを私は知っています。

これを実装するための最良の方法は何だと思いますか?

ありがとう、デビッド

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

4

1 に答える 1

2

この答えはあなたの声明に応えたものです:

「理想的には、他のサブクラスの場合と同じように関数を呼び出すとよいでしょうが、マルチプロセスがどのように機能するかではないことを私は知っています。」

サブプロセスがJVMで実行されているJavaプログラムである場合、必要に応じて、実際にこれを行う方法は次のとおりです。

リモートメソッド呼び出しを使用します。ウィキペディアの記事には、RMIサーバーとクライアントの小さな例があります。

本質的に、これは次のように機能します。

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

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

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

于 2012-05-07T17:18:45.377 に答える