質問

C ++のリスクに基づいたネットワークボードゲームの作成を検討しています。私のアイデアは、ユーザーがゲームを接続および作成/参加できるゲームロビーをホストする中央サーバーを持つことでした。この場合、Observerパターンは魅力的なようです。なぜなら、すべてのゲームモデル/ロジックをサーバー上でホストでき、クライアントはこれを単に監視し、ビューを使用して現在のゲームの状態を表示するからです。

最初の質問:このアプローチは可能ですか?私が聞いた/考えたことのほとんどは、クライアントが独自のゲームモデルを持っているということです。ただし、計算集約型ではないゲームの場合、サーバーでホストされる単一のモデルに利点があると考えています(同期の問題がない、不正行為を防ぐなど)。

2番目の質問:ネットワークを介してObserverパターンを実装するにはどうすればよいですか?ネットワーク経由で直接メソッドを呼び出すことはできないため、データを使用してこれをシミュレートするための何らかの簡単な方法が必要になります。 「プル」を使用するとより多くの利点がありますか? (オブザーバーはゲームデータの更新をリクエストします)または「プッシュ」します。 (サーバーはすべてのクライアントに新しい更新データをプッシュします)アプローチ?

役に立ちましたか?

解決

問題のステートメントから、分散オブザーバーパターンまたは分散パブリッシュ/サブスクライブを実装する必要があるようです。 PubSubはメッセージングパラダイムであり、MOM(メッセージ指向ミドルウェア)を使用して簡単に実装できます(RabbitMQ、ActiveMQ、OpenMQを参照)。

XMPPはあなたの目的にかなうこともできます( XEP-0060 を参照)。必要なのは、JabberサーバーとC ++ XMPPライブラリだけです(glooxは優れたライブラリであり、XEP-0600をサポートしています)。

pubsubhubbub もご覧ください。

他のヒント

この方法で本当にやりたい場合は、具体的なオブザーバーにプロキシパターンも実装させます。プロキシは、データの送受信を処理し、基本的にはローカルメソッド呼び出しをリモートメソッド呼び出しに変換します。

非同期データを扱っているため、「パブリッシュ/サブスクライブ」と呼ばれるオブザーバーのバリエーションを検索する必要がある場合があります。その中の観察は、具体的な観察者がイベントを聞いて、コミュニケーションが必要なときにイベントを上げることによって行われます。たとえば、データを受信するとイベントが発生する可能性があります。

リモートで調べることもできます。これは、ここでやろうとしていることの一種です。あなたがやろうとしていることには少し重すぎるかもしれませんが。

二重の目的でObserverパターンを使用しているようです。あなたはゲームクライアントです。サーバーですが、それだけではありません。また、プレイヤー情報をサーバーに送信します。だから彼らは本当に観察する以上のことをしています。たぶん、基本的なクライアント/サーバーパラダイムを使用するだけで、「デザインパターン」について心配する必要はありません。または、パターン化された設計アプローチが必要な場合は、サーバーがメディエーターであるメディエーターパターンを調べてください。個人的には、クライアント/サーバーアプローチに固執します。

申し訳ありませんが、これはあなたの具体的な質問に答えるのではなく、単に思考の糧とするだけです。

最初の質問:はい、それはすべてのクライアントサーバーゲームで使用されるモデルです。

2番目の質問:" push"タイミング同期とバンドウィッチの観点からアプローチが優れています。 RPCライブラリ(リモートプロシージャコール)を使用して、関数呼び出しをシミュレートします。 C ++を使用している場合は、Raknetをお勧めします。 Javaを使用している場合、Jnagまたはproto-buffersをお勧めします。

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