1

Google App Engine にポーカーを実装することを検討してください。プレーヤーがチェック/フォールド/レイズするのに 10 秒しか許可されていないとします。

つまり、プレーヤーからの応答がないまま 10 秒が経過した場合、プレーヤーがフォールドしたことを宣言する DataStore に書き込むコードを実行するタイマーが起動する必要があります。これを Google App Engine に実装する慣用的な方法は何ですか。

4

3 に答える 3

2

GAE には「タスク」と呼ばれる機能があります。悲しいことに、解決が保証されていないため、現在 +10 秒にスケジュールされているタスクは、10 秒またはそれ以降に実行できます。

解決策: 現在のタイムスタンプを現在のプレーヤーに関する情報とともにデータベースに書き込みます。プレーヤーのいずれかが現在のゲームに関する更新情報を要求した場合、このタイムスタンプを確認して現在のタイムスタンプと比較し、これらの 10 秒が経過したかどうかを判断し、それに応じてデータベースを更新できます。

このソリューションをタスクと組み合わせて、誰もそのゲームを「見て」いない場合でも、いつか更新されるようにすることができます。

于 2013-02-18T10:37:30.777 に答える
1

これは、リクエスト ハンドラーの外で保持できる唯一のコードであるため、バックエンドで実行する必要があります。

  • プレイヤーが配られます。タイマーはバックエンドで開始します。タイマーが切れます。プレイヤーのステータスが更新されました。

バックエンドは特別な App Engine インスタンスであり、リクエストの期限がなく、メモリと CPU の上限が高く、リクエスト間で状態が永続的です。それらは App Engine によって自動的に開始され、長期間にわたって継続的に実行できます。各バックエンド インスタンスには、リクエストに使用する一意の URL があり、複数のインスタンス間でリクエストを負荷分散できます。

https://developers.google.com/appengine/docs/python/backends/

于 2013-02-18T10:20:27.250 に答える
1

同期的に動作する必要はありません。つまり、最後のユーザー アクションからちょうど 10 秒後に何らかのアクションを実行します。

最後のユーザー アクションの時間を記録し、次にユーザー アクションが発生したときにそれに応じて行動します。

フォールドするまでの時間をユーザーに示すなど、応答性を高めるには、クライアントでもこれを追跡する必要があります。

于 2013-02-18T11:09:15.387 に答える