我一直在阅读和研究 Akka.NET,觉得它非常适合我将要开发的一个非常基本的在线多人游戏。
我对 Akka.NET 中的 Persistence 模块特别感兴趣。我希望能够在任何时间点对我的整个 Actor 系统进行快照,并在我选择的时间恢复该快照(本质上是游戏状态的保存/加载机制)。Actor 持久性的保存和加载似乎是自动发生的,而我希望手动快照系统的当前状态并在我选择的时间恢复。
Akka.NET 持久性可能会出现这种情况吗?
我一直在阅读和研究 Akka.NET,觉得它非常适合我将要开发的一个非常基本的在线多人游戏。
我对 Akka.NET 中的 Persistence 模块特别感兴趣。我希望能够在任何时间点对我的整个 Actor 系统进行快照,并在我选择的时间恢复该快照(本质上是游戏状态的保存/加载机制)。Actor 持久性的保存和加载似乎是自动发生的,而我希望手动快照系统的当前状态并在我选择的时间恢复。
Akka.NET 持久性可能会出现这种情况吗?
Akka.NET 持久性使用事件溯源作为持久化和重新创建参与者状态的方式。它还支持创建完整当前状态的快照,但这应该被视为性能优化,不能单独使用。另请注意,持久性在每个参与者的基础上起作用。您不能将整个系统冻结为一种状态。
但是,您可以做以下事情:您实现了持久性,但从不持久化任何事件。然后,您向顶级参与者发送一条消息,上面写着“SaveSnapshotRecursive”之类的内容。所有收到该消息的参与者都将保存快照并将消息转发给他们的孩子(他们还应该在快照中记录他们当前孩子的列表)。如果您愿意,此快照存储可以只是基于文件的,并且您可以随时使用它来恢复完整状态。