2

私はC++のリスクに基づいたネットワーク化されたボードゲームを作りたいと思っています。私のアイデアは、ユーザーが接続してゲームを作成/参加できるゲームロビーをホストする中央サーバーを用意することでした。この場合、オブザーバーパターンは魅力的です。サーバー上ですべてのゲームモデル/ロジックをホストでき、クライアントはこれを監視し、ビューを使用して現在のゲームの状態を表示するだけだからです。

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

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

4

4 に答える 4

4

問題文から、分散オブザーバー パターンまたは分散パブリッシュ/サブスクライブを実装する必要があるようです。PubSub はメッセージング パラダイムであり、MOM (Message Oriented Middleware) を使用して簡単に実装できます - (RabbitMQ、ActiveMQ、OpenMQ を参照) MOM が面倒な作業を行います。

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

pubsubhubbubにも興味があるかもしれません。

于 2010-07-28T04:51:36.670 に答える
3

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

非同期データを扱っているので、「パブリッシュ/サブスクライブ」と呼ばれるオブザーバーのバリエーションを調べたいと思うかもしれません。その中での観察は、具体的なオブザーバーがイベントをリッスンし、通信が必要なときにイベントを発生させることによって行われます。たとえば、データの受信によってイベントが発生する可能性があります。

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

于 2009-11-27T17:44:36.357 に答える
0

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

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

于 2010-06-30T16:21:42.507 に答える
0

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

申し訳ありませんが、これが特定の質問の答えではないことはわかっていますが、考える材料として受け取ってください.

于 2009-11-27T17:41:12.913 に答える