私は、複数のユーザーが同じホワイトボードを見て、それを描くことができる楽しいオンラインホワイトボードアプリケーションを作成しています。私はWebSocket(フロントエンドではバニラJS、バックエンドではScala)を使用していますが、今は基本的にマウスイベントを1人のユーザーから残りのユーザーにブロードキャストし、イメージをクライアント側にレンダリングしています。多くのストリーミングと共有状態のデザインパターン
しかし、これは一時的な共有状態になりますが、ユーザーはいつでもホップして保存された共有状態を確認できます。私はこれがおそらくバックエンドとフロントエンド上で共有レンダリングコードを持つ必要があると考えているので、クライアントはストリームとしてイベントをレンダリングしますが、クライアントが関連するときにサーバは生のイメージデータを送ることができます。
私の質問はここです:私はこの種のプロジェクトに気づくべき他のデザインパターンは何ですか?これは楽しい/学習のためのプロジェクトなので、これは自由な質問ですが、この種のデータフローに役立つ参考資料が含まれています。
@Nathan - これはあなたの質問に答えましたか? – jfriend00
これは良い答えですが、私がすでに考えていることです。私が持っているマウスイベントの数は非常に高価になり、あまりにも多くの解像度を失うことなくイベントをあまりにも圧縮することはできません。 ここではいくつかの外部リソースを使って何かを探しているので、答えを受け止めるつもりです。たとえば、いくつかの大規模なマルチプレイヤーゲームはこの種の問題に対処します。しかし、答えをありがとう! – Nathan
@Nathan - 最初と最後のポイントに直線セグメントを圧縮すると、データ量が少なくて済み、解像度が失われ、レンダリングされた画像ほど正確ですが、よりコンパクトです。したがって、適切な圧縮は、欠点のない多くの意味をなす。レンダリングはすべての中間点を保存します。これは、ベクトルグラフィックスとビットマップグラフィックスの違いです。 GoogleがビットマップグラフィックスからGoogleマップのベクトルグラフィックスに移行した大きな理由があります。方法はより効率的です。 – jfriend00