GAE バックエンドを使用して 2 プレイヤーのターン制ゲームを実装しようとしています。このゲームで最初に必要なのは、次のように動作する非常に単純なマッチメイキング システムです。
- ユーザー A がバックエンドに一致を要求します。バックエンドは彼に後で戻ってくるように言います
- ユーザー B がバックエンドに一致を要求します。彼はAとマッチします。
- ユーザー C がバックエンドに一致を要求します。バックエンドは彼に後で戻ってくるように言います
- ユーザー D がバックエンドに一致を要求します。彼はCとマッチします。
- 等々...
(編集:これを理解できれば、ターンベースのゲームの他のほとんどの操作で同じ実装を使用できると仮定しています)
これはApple GamecenterとXbox Liveで非常に簡単に実行できますが、GAE のようなオープンでプラットフォームに依存しないバックエンドで実装したいと考えています。いくつかの調査の後、GAE 実装の次のオプションを見つけました。
- memcache を使用します。ただし、memcache が異なるインスタンス間で同期されるという保証はありません。いくつかのテストを行ったところ、memcache の同期ミスが原因でマッチ リクエストが消えることが実際に確認できました。
- シャーディング カウンターを使用して memcache を強化します。これで常に複数インスタンスの問題が解決されるわけではなく、memcache クォータの使用率が高くなる可能性があります。
- Compare and Set で memcache を使用します。ミューテックスとして使用する場合、複数インスタンスの問題は解決されません。
- タスク キュー。これらの使用方法はわかりませんが、誰かが可能な解決策として言及しました。ただし、キューが GAE クォータをすぐに消費してしまうのではないかと心配しています。
- キューをプッシュします。同上。
- 取引。同上。また、おそらく非常に高価です。
- チャネル。同上。また、おそらく非常に高価です。
マッチメイキングはオンライン ゲームの非常に基本的な操作であることを考えると、これに遭遇したのは私が最初ではありません。したがって、私の質問:
- マッチメイキングのための安全なメカニズムを知っていますか?
- 複数のソリューションが存在する場合、(GAE クォータの使用に関して)最も安価なソリューションはどれですか?