0

まず、標準のASP.NET Webサイトを使用してクライアント/サーバーソリューションのようなものを作成しています。この方法は推奨されていないことを知っています。ほとんどの人は「COMET!」と叫びたがります。または「HTML5ソケット!」-しかし、しないでください;-)!

私がしていること...

私はウェブサイトでMMORPGを作成しています。

同時に連絡を取る必要のあるクライアントが何人かいます。これは、アプリケーションスコープのグローバルオブジェクトによって実行されます。

私の問題

複数のクライアントに対してイベントを呼び出す必要があります。たとえば、攻撃が実行された場合、いくつかのグラフィックを更新する必要があります。攻撃ロジックはグローバルオブジェクトで解決されますが、各クライアントはこれに応答する必要があります。

今、私は次のことをします:

   fightTrace.Reciever.InvokeMoveEnded(this);
   fightTrace.FiredBy.InvokeMoveEnded(this);

(これは一種のオブザーバーパターンです)

現在起こっているのは競合状態です。page_loadイベントをロードする人はこれらのイベントの両方を取得し、それらを実行していない人はUIに変更を経験しません。

それで、私が本当に欲しいのは何ですか?

私が本当に必要としているのは、アプリケーションの状態を通じてオブザーバーパターンを作成するための本物の素晴らしい方法です。この場合はクライアントであるすべての「リスナー」にイベントを送信してから、更新を行う必要があります。

これを行う1つの方法は、真/偽のセッションのものです。しかし、私は本当にもっと良い方法が欲しいです!

ありがとう!

4

1 に答える 1

0

コンテキストを正しく理解していれば、アプリケーション状態オブジェクトの状態が変更されるたびに、アプリケーションのすべてのクライアントを同期する必要があります。ここで忘れているのは、HTTP プロトコルのステートレスな動作です。応答が送信されると、接続が失われます。HTTP 要求を再度送信して、再度処理する必要があります。ただし、状態管理と Ajax ベースの短時間でタイムリーな更新を使用して、接続された環境をシミュレートすることで何かをエミュレートできます。しかし、私はあなたが聞きたくない言葉を発しなければなりません。推奨されません。

代わりに、アプリケーションオブジェクトの状態を保存し、リクエストが来るたびに、オブジェクトの更新された状態に基づいて応答を提供することができます。クライアントがリクエストを開始する方法。

于 2011-02-15T15:32:20.130 に答える