複数のクライアントと 1 つのサーバーがあります。各クライアントには、自由に使えるいくつかのコマンドがあります。
public interface Command {
public int run();
}
public class CommandOne implements Command {
// ...
}
public class CommandTwo implements Command {
// ...
}
これらのコマンドは、クライアント内 (マシン上) で実行できます。または、サーバーに「渡して」実行し、結果を返すこともできます。
Java 内でクライアントとサーバーの両方を実装する最も簡単な方法は何ですか?
以下は私が思いついたものです:
- コマンドをシリアライズしてサーバーに渡し、サーバーにデシリアライズさせ、コマンドを実行して結果を返します。(メソッドをシリアル化できないため、これは機能しません。)
- コマンドの名前を (文字列として) サーバーに渡し、サーバーに
switch
ステートメントを実行させ、同じタイプの新しいコマンドをインスタンス化して実行し、結果を返します。これは、新しいコマンド クラスを追加した場合、クライアントとサーバーの両方を更新する必要があることを意味します。 - 必要なメソッド ロジックを何らかの構造 (JSON、XML など) にシリアル化してサーバーに渡し、サーバーでカスタム クラスに逆シリアル化して、メソッド ロジックを実行し、結果を返します。これはやり過ぎのようで、DSL を書く必要があります。
足りないものはありますか?
編集
複数のクライアントが同時にサーバーと通信できるため、各リクエストは何らかの方法でスレッド化する必要があります。ただし、これはおそらく上記の問題の問題ではありません。