akkaを使用してユーザーのゲーム状態を管理する方法を理解しようとしています。akkaを使用してユーザーのゲーム状態を管理する方法
ゲームの状態はmysqlに保持されますが、これを必要とする他のサービスがあるため変更できません。
ゲームで起こることはすべて「イベント」とみなされます。
あなたは誰かが達成できる「レベル」を持っています。レベルは、それに関連するすべての「イベント」を完了すると達成されます。
だからあなたが持っている:
Level
- event1 e.g. reach a point in the game
- event2 e.g. pickup a sword
- event3 e.g. defeat a monster
だからゲームで多くのレベル、およびレベルにリンクされているイベントの100年代があります。
したがって、すべての「イベント」はHTTP経由でバックエンドに送信され、イベントをデータベースに保存します。
その後、ユーザーのゲームプロファイルをメモリに読み込んでから、新しいイベントが発生してから達成したレベルを再計算する必要があります。 注:この計算は、私がここに書いているより少し複雑であるため、データベースレベルでは実行できません。
私が見ている問題は、akkaを使用すると、データが古くなる可能性があるため、複数のアクターが同じユーザーのイベントを処理できないことです。
ただ、データベース
を更新し、新しいイベントが到着したときに、彼らが持っている場合ので、私は、メモリ内のゲームプロファイルをロードレベルをループし、それらのいずれかが達成されたかどうかを確認する必要があり、明確にしますe.g. update levels set achieved=true where level_id = 123 and user_id=234
たとえばactor1はプロファイル(このユーザーのすべてのレベルとイベント)を読み込んだ後、受信トレイに到着したばかりの新しいイベントを処理します。 同時に、actor2はプロファイルを読み込み(actor1と同じ)、新しいイベントを処理します。 mysqlへの変更が持続すると、データはsych外になります。
私がスレッドを使用していた場合は、ゲームプロファイルの計算中にロックし、dbに固定しなければなりません。
私はAkkaを使ってこれを行い、物事を並行して扱うことができますか、またはこのScenerioはそれを許さないのですか?
この問題を解決できる 'akka-persistence'のように見えます –