2

ゲーム開発をマルチプレイヤーの領域に拡大したかったのですが、ソケットを備えた適切なサーバーの資金や、ソケットがどのように機能し、適切かつ安全に使用するかを理解するための時間がありません。

しかし、私が完全にできることは、さまざまな形式でPHPを介してFlashとMySQLの間でデータを送受信することです。

ターンベースのゲームを作成する場合、この方法で(PHPを介して)MySQLデータベースをポーリングするのが適切でしょうか?現在、私はこれらの方針に沿って考えています。

  1. 2人のプレーヤーは、オープンゲームのグローバルリスト(かなり標準的なアプローチ)などの手段でお互いを見つけます。
  2. エンカウンターまたは同様の行がデータベースに作成されます。
  3. この行には、自分の順番とゲームの現在の状態に関する情報がJSONまたはXML形式で格納されます。この行には、ゲームの状態情報についてデータベースを最後にポーリングした時間を表す各プレーヤーのタイムスタンプも含まれます。プレイヤーがターンを完了すると、「ターン」フィールドが切り替わります。
  4. 各プレイヤーはデータベースをポーリングして、まだ自分の番かどうかを確認します。そうである場合、ゲームの状態情報は、最後のターンが終了する前のゲームの状態情報と比較され、違いを反映するために画面上でアクションが実行されます。その後、彼らの順番が始まり、プロセスが繰り返されます。
  5. データベースをポーリングしているときに、対戦相手が120(任意)秒以内に自分の順番でデータベースをポーリングしなかった場合、プレーヤーは、他のプレーヤーが去った/タイムアウトしたなどの通知を受け取ります。

これは遅すぎるのでしょうか、それとも信頼できないのでしょうか?または、両方のプレーヤーが同時にデータベースをポーリングした結果など、予測できる他の問題がありますか(それが重要かどうかはわかりません)?

4

1 に答える 1

3

ポーリングする代わりに、サーバーからFlashクライアントにデータをプッシュできるテクノロジーを検討することをお勧めします。最も一般的な2つのオプションは、ソケット接続、またはリアルタイムメッセージングプロトコルの使用です。詳細については、この質問を参照してください。これは、Flashを使用してリアルタイムゲームを構築するためのデフォルトのアプローチです。

PHPの場合、RTMPベースのAMFプロトコルをサポートするオープンソース製品またはフレームワークがいくつかあります。

  1. PHP用のWebORB
  2. Zend Framework AMF Adob ​​e Systemsは、オープンなバイナリアクションメッセージフォーマット(AMF)プロトコルのサポートをZendFrameworkに提供しました。すでにZendFrameworkを使用している場合に非常に便利です。
  3. amfPHP
  4. sabreamf

私は個人的にZendFrameworkAMFを使用して良い結果を出し、WebORBについても良いことを聞きました。他のAMFライブラリは使用していません。

特定の質問について:データをクエリするため、情報をJSONまたはXMLとしてデータベースに保存しません。データをネイティブSQLデータとして保存する方がはるかに効率的です。

これは、ZendFrameworkAMFを使用してどのように機能するかを示す短い例です

于 2012-08-28T08:08:27.183 に答える