ディスプレイ ウォールのデモ アプリケーションを作成しています。
環境:
- それぞれが最大 6 台のディスプレイを駆動する N 台のマシン
- 有線ギガビットスイッチ
- 各ノードで 1 つのコピーを実行して、きれいな絵を描く OpenTK アプリケーション
各ノードは、デモ実行可能ファイルの同一のコピーを実行します。各ノードには、壁全体の解像度と、その空間内のそのノードのディスプレイの相対位置を含む構成データもあります。レンダリング時に、投影行列の後にスケール/平行移動変換が適用されます (ノードがレンダリングを担当するビューの部分に効果的にズームインします。
ノードには、「送信」または「受信」モードにする起動スクリプトで設定された「モード」スイッチがあります。1 つのノードを除くすべてのノードが「受信」にあります。(ノードを「送信」に切り替えると、他のすべてのノードが「受信」に切り替えられます)。
デモ アプリは、いくつかのプリミティブ ジオメトリ (グリッド、20 面体など) の基本的な FPS タイプのフライスルーです。更新ごとに、送信側ノードは、いくつかの状態情報 (カメラの移動/回転、移動オブジェクトの変換) を含む UDP データグラムをブロードキャストします。
リスナーはこれらのデータグラムを非同期に受信し、状態を逆シリアル化し、ローカル コピーを更新します。
最終的な効果は、ラップトップでアプリを実行して飛び回ると、壁がうまく追従することです。これはすべてかなりうまく機能します。
ただし、システムの規模が拡大するにつれて (10 ディスプレイから、たとえば 500 ディスプレイに)、ネットワーク レイテンシが問題になるのではないかと懸念しています。また、このようにネットワーク全体で状態をスパムするのではなく、データベースに詰め込み、各ノードがそこからプルするようにするのが良いと思いましたが、既製のデータベースが最大になるとは思えません60FPS * 500 ノード サイクル。
提案?多くのノード間で状態を非常に高速に共有するための最良の方法は何ですか?