2017-10-25 10 views
0

私はAkka.NETで読んできたことをよく読んできており、非常に基本的なオンラインマルチプレイヤーゲームに適していると感じています。アクタシステム全体の状態をAkka.NETに保存することはできますか?

私は特にAkka.NET内のPersistenceモジュールに興味がありました。私ができることが大好きなのは、任意の時点で私のActorシステム全体のスナップショットを撮り、選択した時点でそのスナップショットを復元することです(本質的にゲーム状態のSave/Loadメカニックです)。これは、システムの現在の状態を手動でスナップショットし、私が選択した時点で復元することを求めているのに対し、この永続性の保存と読み込みはかなり自動的に行われるように見えます。

このようなシナリオはAkka.NETの永続性で可能ですか?

答えて

0

アクカの永続性は、アクタの状態を維持し再作成する方法としてevent sourcingを使用します。また、完全な現在の状態のスナップショットの作成もサポートしていますが、これはパフォーマンスの最適化とみなされ、単独では使用できません。また、永続性はアクター単位で機能することにも注意してください。システム全体を1つの状態にフリーズすることはできません。

ただし、永続性は実装していますが、イベントを永続化することはありません。次に、 "SaveSnapshotRecursive"のようなメッセージをトップレベルの俳優に送ります。そのメッセージを受け取ったすべてのアクタはスナップショットを保存し、そのメッセージを子供に転送します(スナップショットには現在の子のリストも記録する必要があります)。このスナップショットストアは、好きなだけのファイルベースでもかまいません。いつでも完全な状態を復元するために使用できます。

+0

ああ、それは計画のように聞こえる...ありがとう!これらのスナップショットは再帰的に復元する必要があります。名前などでスナップショットを選択的に復元できるか – ProxyTech

+0

@ProxyTech復元すると、Akka.Persistenceモジュールはスナップショットをチェックします。私はそれが最新のものだけを使うと思う。もちろん、いくつかを保存して、必要な場所に置くことができます。その後、スナップショットの作成以来、すべてのイベントを再生しようとします。しかし、あなたが持っていないので、それは問題ではありません。ノードはすべて子を復元する必要があります。順番に子のリストを含むスナップショットから状態を取得します。 –

関連する問題