0

複数のクライアントと 1 つのサーバーがあります。各クライアントには、自由に使えるいくつかのコマンドがあります。

public interface Command {
    public int run();
}

public class CommandOne implements Command {
    // ...
}

public class CommandTwo implements Command {
    // ...
}

これらのコマンドは、クライアント内 (マシン上) で実行できます。または、サーバーに「渡して」実行し、結果を返すこともできます。

Java 内でクライアントとサーバーの両方を実装する最も簡単な方法は何ですか?

以下は私が思いついたものです:

  • コマンドをシリアライズしてサーバーに渡し、サーバーにデシリアライズさせ、コマンドを実行して結果を返します。(メソッドをシリアル化できないため、これは機能しません。)
  • コマンドの名前を (文字列として) サーバーに渡し、サーバーにswitchステートメントを実行させ、同じタイプの新しいコマンドをインスタンス化して実行し、結果を返します。これは、新しいコマンド クラスを追加した場合、クライアントとサーバーの両方を更新する必要があることを意味します。
  • 必要なメソッド ロジックを何らかの構造 (JSON、XML など) にシリアル化してサーバーに渡し、サーバーでカスタム クラスに逆シリアル化して、メソッド ロジックを実行し、結果を返します。これはやり過ぎのようで、DSL を書く必要があります。

足りないものはありますか?

編集

複数のクライアントが同時にサーバーと通信できるため、各リクエストは何らかの方法でスレッド化する必要があります。ただし、これはおそらく上記の問題の問題ではありません。

4

2 に答える 2

0

私が本当にエレガントで楽しいと思った1つの解決策。

ポートを開き、「Runnable」が来るのを待っているだけのリスナーがある場合は、run メソッドを実行できます。変数はすべて渡され、run メソッドが行うことはすべて実行されます。

「runOnServer()」および「runOnClient()」メソッドを使用すると、さらに良い結果が得られます。クライアントはオブジェクトを作成し、それをサーバーに渡し、それを続行します。サーバーは runOnServer() メソッドを実行します (変数はシリアル化されているため、変数に対して)。その後、クラスは自動的にクライアントにシリアル化され、そこで runOnClient() が返されます。ものが実行されます。

サーバー上で何かを実行するのが本当にスムーズになります。

さらに高度になりたい場合は、Hazlecast を調べてください。これは既に行われています。

于 2013-07-29T21:29:34.530 に答える