質問

同期表示ルーチンを実行しているLAN上に一連のシステムがあります。たとえば、コーラスラインを考えてみましょう。彼らが実行したプログラムは修正されています。各「クライアント」がありますルーチン全体をダウンロードしてから、中央の「サーバー」に連絡してください。同期のためのルーチンの固定点で。ルーチン自体には、おそらく20の可能な命令があります。

各クライアントは同じルーチンを実行しますが、一度にまったく異なることを実行できます。コーラスラインの一部は左に蹴られ、別の部分は右に蹴られることがありますが、すべてが互いに合っています。クライアントはいつでも参加および脱退できますが、すべてのクライアントにパーツが割り当てられています。部品を実行する人がいない場合、実行されません。

これはすべてC#.Netでコーディングされています。

クライアント表示は、Windowsフォームアプリケーションです。サーバーはTCP接続を受け入れ、ラウンドロビン方式でサービスを提供し、何が行われているかのマスタークロックを維持します。クライアントは、「同期ポイント32に到達しました」という信号を送信します。 (または19、5、その他)、サーバーが確認するのを待ってから移動します。または、サーバーは「いいえ、同期点15から開始する必要があります」と言うことができます。

これはすべてうまくいきます。最初のクライアントと最後のクライアントの間で同期点に到達するまでにわずかなビットの遅延がありますが、ほとんど目立ちません。数か月間実行しました。

仕様が変更されました。

クライアントは、サーバーからのほぼリアルタイムの指示に応答する必要があります。これは、プリセットのダンスプログラムではなくなりました。サーバーは指示を送信し、ダンスプログラムはその場で作成されます。プロトコル、サービスループ、プログラミング命令を再設計するという楽しい仕事ができます。

ツールキットには、標準の.Net 3.5ツールボックスに含まれるものがすべて含まれています。非常に多くのシステム(クライアント)が関与する可能性があるため、新しいソフトウェアのインストールは面倒です。

クライアントの同期を維持するための提案(ラッチシステム、UDP、ブロードキャストなど)、「ダンスプログラム」の配布、これを従来のクライアント/サーバーTCP配置よりも簡単にする方法を探しています。

時間/速度の制限も続いていることに注意してください。ダンスプログラムをネットワークデータベースに入れることもできますが、かなり迅速に指示を押し出す必要があり、少し太いプロトコル(DBI、SqlClientなど)を使用して多くの読者がいます。テキストの。それは過度に複雑に思えます。そして、まだすべてを同期して表示するために何かが必要です。

提案?ご意見?ワイルドな推測?コード例?

PS:回答が「正しい」とマークされない場合があります。 (これは「正しい」答えではないため)、確かに良い提案に対して+1票。

役に立ちましたか?

解決

1つのシステムで実行される4台のディスプレイのバンクを同期し、中央サーバーからメッセージを受信することで、同様のことを(かなり前に)行いました。

1つの「マスター」を含むかなりの量のテストを経て、ようやく解決したアーキテクチャ機械。あなたの場合、これはマスターとして機能する20のクライアントの1つを持ち、TCPを介してサーバーに接続することです。

サーバーは、一連のコマンド全体をそのマシン全体に送信します。

その後、そのマシンはUDPを使用してリアルタイムの指示を他の各マシン(LAN上の19個のクライアント)にブロードキャストし、ディスプレイを最新の状態に保ちました。ここでは、いくつかの理由でUDPを使用しました。オーバーヘッドが少なく、全体のリソース使用量を抑えるのに役立ちました。また、リアルタイムで更新しているため、1つまたは2つの「フレーム」が同期していなかったため、目立ったものではなく、少なくとも私たちの目的(人間が座ってシステムを操作している)には十分なほど目立ちませんでした。

ただし、これがスムーズに機能するための重要なポイントは、メインサーバーと「マスター」間でインテリジェントな通信手段を使用することです。マシン-帯域幅をできる限り低くしたい。あなたのようなケースでは、20台のマシン用の現在の命令セットを最小の形式で持つ単一のバイナリblobを思いつくでしょう。 (たぶん、20バイト、または必要な場合は40バイトなど)。 「マスター」マシンは、これを他の19台のマシンとそれ自体に変換することを心配します。

これにはいくつか良い点があります。サーバーは、クラスター内のすべてのマシンではなく、クラスター内の1つのマシンに送信する方がはるかに簡単です。これにより、たとえば、単一の集中サーバー「ドライブ」を使用できます。どこでもとんでもないハードウェア要件を抱えることなく、効率的に複数のクラスターまた、クライアントコードを非常にシンプルに保ちます。 UDPデータグラムをリッスンし、それを何でもする必要があります-あなたの場合、20のコマンドのうちの1つがあるように聞こえるので、クライアントは非常にシンプルになります。

"マスター"サーバーは最もトリッキーです。私たちの実装では、実際には他の19(個別のプロセスとして)と1つの「翻訳」と同じクライアントコードがありました。ブロブを取得し、20個に分割して送信するプロセス。書くのはかなり簡単で、とてもうまくいきました。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top