2017-10-25 9 views
0

나는 Akka.NET을 읽고 숙련 된 인물이며, 내가 개발할 매우 기본적인 온라인 멀티 플레이어 게임에 적합하다고 생각한다.Akka.NET에서 전체 액터 시스템의 상태를 저장할 수 있습니까?

저는 Akka.NET 내의 Persistence 모듈에 특히 관심이있었습니다. 내가 할 수있는 일이라면 언제든지 내 전체 액터 시스템의 스냅 샷을 가져 와서 선택한 시점에 스냅 샷을 복원하는 것입니다 (본질적으로 게임 상태의 저장 /로드 메 커닉). 이 Saving and Loading의 액터 퍼시스턴스는 꽤 자동적으로 일어나는 것처럼 보입니다. 반면에 수동으로 시스템의 현재 상태를 스냅 샷하고 원하는 시점에 복원하려고 할 것입니다.

Akka.NET 지속성과 같은 시나리오가 가능합니까?

답변

0

Akka.NET 지속성은 액터 상태를 유지하고 다시 만드는 방법으로 event sourcing을 사용합니다. 또한 전체 현재 상태의 스냅 샷 생성을 지원하지만 이는 성능 최적화로 간주되어야하며 단독으로는 사용할 수 없습니다. 또한 지속성은 액터별로 적용됩니다. 전체 시스템을 하나의 상태로 동결시킬 수는 없습니다.

그러나 다음을 수행 할 수 있습니다. 지속성을 구현하지만 이벤트를 지속하지 마십시오. 그런 다음 최상위 액터에게 "SaveSnapshotRecursive"와 같은 메시지를 보냅니다. 해당 메시지를받는 모든 액터는 스냅 샷을 저장하고 메시지를 자식에게 전달합니다 (스냅 샷에 현재 자식 목록도 기록해야 함). 이 스냅 샷 저장소는 원하는 경우 파일 기반 일 수 있으며 언제든지 전체 상태를 복원하는 데 사용할 수 있습니다.

+0

아, 그건 계획처럼 들리네 ... 고마워! 따라서이 스냅 샷은 재귀 적으로 복원해야합니다. 이름 등으로 선택적으로 스냅 샷을 복원 할 수 있습니까? – ProxyTech

+0

@ProxyTech 복원하면 Akka.Persistence 모듈이 스냅 숏을 확인합니다. 나는 그것이 최신 것만을 사용할 것이라고 생각한다. 물론 여러 개를 저장하고 필요한 위치에 둘 수 있습니다. 그런 다음 스냅 샷을 만든 이후로 모든 이벤트를 재생하려고합니다. 그러나 아무도 없으므로, 그건 중요하지 않습니다. 노드는 모두 자식을 복원해야하며 자식의 목록을 포함하여 스냅 숏에서 상태를 가져옵니다. –