1

私は、サーバーを制御するクライアントプログラムを作成しています。サーバーは、いくつかの大きなハードウェアを制御しています。サーバーは、ハードウェアを初期化、開始、停止、および制御するためのコマンドを受信する必要があります。

クライアントからサーバーへの接続は、TCPまたはUDPソケットを介して行われます。各コマンドは、SCADAプロトコル(ModbusやDNP3など)を使用して適切なメッセージにカプセル化されます。

初期化フェーズの一部には、クライアントからサーバーに一連のコマンドを送信することが含まれます。場合によっては、複数のサブシステムが同時に初期化されるのを防ぐために、コマンド間に秒単位の遅延が必要です。遅延の値は、コマンドのタイプによって異なります。

コマンドデザインパターンは、ここに従うのに良いアプローチだと思います。クライアントはConcreteCommandsをインスタンス化し、呼び出し元はそれをキューに入れます。可変遅延を組み込む方法と、可変遅延のメッセージの送信を処理するためのタイマーとキューを含むより良いパターンがあるかどうかはわかりません。

私はC#を使用していますが、これはデザインパターンの問題であるため、おそらく無関係です。

4

1 に答える 1

0

遅延するタイプのマッピングを保存する必要があるようです。サーバーの起動時に、これらの遅延時間をキャッシュできますか? 次に、指定された遅延の後にコマンドを処理するメソッドを呼び出しますか?

サーバーの起動時:

Dictionary<Type, int> typeToDelayMapping = GetTypeToDelayMapping();

コマンドがサーバーに到達すると、サーバーはこれを呼び出すことができます。

InvokeCommand(ICommand command, int delayTimeInMilliseconds)

そのようです:

InvokeCommand(command, typeToDelayMapping[type]);
于 2012-08-18T15:32:48.537 に答える