3

Flexでゲームを開発しています。
このゲームにはAIRバージョンとWebバージョンの両方があります。AIRアプリは、ポートのUDPソケットを使用してサーバーに接続します。Webバージョンの目的は、ユーザーが仕事中、または一部のポートをブロックするファイアウォール/プロキシの背後にあるコンピューターでプレイできるようにすることです。したがって、Webはポート80でhttp接続を使用してサーバーに接続します。

http接続に応答するサーバーコードは、BlazeDSを使用するJavaサーブレットになります。ただし、C#サーバーコード(Webサービスなど)について説明する方が簡単な場合は、問題ありません。UDP要求に応答するサーバーコードは、ソケット接続をリッスンする単純なクラスになります。

私の問題は、UDPとhttpコードを組み合わせる方法がわからないことです。5つのAIRクライアントと5つのWebクライアントがある場合、すべてのクライアントを最新の情報で更新できるように、それらはすべてサーバー内の共通のコレクション変数で満たす必要があります。ソケットをリッスンするクラスをインスタンス化するのは誰ですか?そしていつ?

要約
すると、次のようになります。1.必要なことを実現するために、専用サーバーが必要ですか?
2.誰がUDP処理クラスをいつインスタンス化しますか?
3. udp処理クラスとhttp接続用のサーブレットを一緒に保持することさえ可能ですか?httpがなければ、Tomcatも必要ありません。ただし、プレーヤーコレクションを更新できるように、httpコードとudpコードは一緒に保つ必要があります。UDP処理クラスをインスタンス化し、サーブレットがサーバーにデプロイされたときにソケットをリッスンするように指示することは可能ですか...またはそのようなものですか?

どんなアドバイスでも大歓迎です。
よろしくお願いします、
ミハ

4

1 に答える 1

1

httpとudpコードは一緒にとどまる必要があります

いいえ、そうではありません。これらはゲームデータの転送メカニズムであるため、透過的である必要があります。UDPサーバーとHTTPサーバーは、ゲームのバックエンドに接続する必要があります。どのような方法で接続するかはユーザー次第です。バックエンドコードから直接HTTPおよびUDP(ソケット)モジュールを使用してメモリ内に配置することも、何らかのサービスを使用することもできます(したがって、他のチャネルが同じバックエンドと通信できるようにすることができます)。

このゲームバックエンドはユーザーに直接接続せず、UDPおよびHTTPモジュールとのみ通信します。

次に、このバックエンドから、HTTPとUDPの両方から受信したメッセージを処理し、同じチャネルを介して応答を送信します。

例:

  1. AIR-client 1は、有効なログインメッセージをUDPサーバーに送信します。
  2. UDPサーバーは、ログインメッセージをゲームバックエンドに転送します。
  3. ゲームバックエンドは成功した結果メッセージをUDPサーバーに返します
  4. UDPサーバーは、結果メッセージをAIRクライアント1に転送します。

例2:

  1. これで、HTTPクライアント1は、たまたますでにログインしているため、現在ログインしているすべてのユーザーに要求します。これは、HTTPを介してHTTPサーバーに要求します。
  2. HTTPサーバーは、このリクエストをゲームのバックエンドに転送します。
  3. ゲームバックエンドは情報をHTTPサーバーに返します
  4. HTTPサーバーはクライアントに応答を返します。
于 2012-12-20T10:33:24.553 に答える