0

学校のプロジェクトで C# でカード ゲームを作成しています。このカードゲームはネットワーク化されています。カード ゲームのゲーム データは、gameData としてシングルトン オブジェクトに格納されます。gameData には、プレイヤー名、ゲームが待機しているプレイヤー、プレイヤー オブジェクトが保持されます。各プレイヤーには 3 つの List オブジェクトがあります。カードは再びカスタム オブジェクトです。当初は、カード、プレーヤー、gameData オブジェクトごとに ToByte() メソッドを作成し、それらをシリアル化して、TCPlistener を使用してネットワーク経由で送信する予定でした。しかし、時間が足りないので、他の方法を探しています。

これらは私が聞いた解決策です:

-SOAP (これを実装する方法がわからない)

- データベース (小規模なデータベース サーバーをオンザフライで実行できる場合を除き、LAN ではやり過ぎのようです)

-クライアントでアクティブ化されたオブジェクト (ただし、これにより、クライアントごとに異なるシングルトンが作成されます)

私がやりたいことは、各クライアントが独自の gameData を使用するようにすることですが、get、set を使用すると、このシングルトン オブジェクト データをホストするサーバーと通信します。おすすめは何ですか?

4

4 に答える 4

5

WCF はシングルトン サービスをサポートします

[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)] 
class MySingleton : ...
{...}

このようにして、すべてのクライアントにサービスを提供する 1 つのサービス インスタンスが作成されます。

WCF を使用すると、ごくわずかなネットワーク コードで簡単にネットワーク通信を行うことができます。

詳しくはこちらの記事をご覧ください。

シングルトン インスタンスを見つけた WCF チュートリアルと組み合わせると、適切な出発点が得られるはずです。

幸運を。

于 2009-02-23T20:38:42.097 に答える
1

これは学校のプロジェクトなので、.NET リモート処理を使用するのが最速の方法だと思います :)

物事をシンプルにし、面倒なデバッグやオブジェクト管理を減らすために、シングルトン オブジェクトを使用してサーバー上のすべてを処理し、marshal by value オブジェクトをデータとしてクライアントに返すことをお勧めします (これも学校のプロジェクトなので)。サーバー オブジェクトに渡す ID を各クライアントに与えます。

于 2009-02-23T20:06:56.167 に答える
0

.net リモーティングは多かれ少なかれ、あなたが求めるもののために構築されていますが、必ずしも必要なものではありません。

クラスへのリモート アクセスは、実際にはシングルトンではなく、ローカル メモリ内のプロキシ スタブであるワイヤの反対側に「シングルトン」を残します。

あなたの状況では、着信要求を受け入れてサーバー側のシングルトンに適用し、必要なデータを返すサービス クラス (可能な Web サービス) を追加します。これにより、デバッグの手間が省けます。

于 2009-02-23T20:22:08.127 に答える
0

私はシングルトンを完全に避けます。これはリモート処理が面倒であるだけでなく、とにかく悪い設計パターンと見なされることがよくあります。なぜシングルトンが悪いのかについて、SO だけでなくウェブ上でも多くの議論があります。特にこの状況では、シングルトンで問題が発生する場合は避けてください。

[編集] シングルトンを回避する主な動機の 1 つは、シングルトンが共有されたグローバルな状態を提供することです。これは単体テストの敵です。可能な限り避けてください。

于 2009-02-23T20:26:08.540 に答える