我正在使用orleans框架实现一个游戏应用程序。每个游戏实例都是一个单独的GameGrain
,并且每个GameGrain
实例都有一些相关的颗粒,例如PlayerGrain
(游戏中每个玩家),WeaponsGrain
(武器库存)。
这些颗粒的主键是:
GameGrain
:<GameGuid>
PlayerGrain
:<GameGuid>-<PlayerGuid>
WeaponsGrain
:<GameGuid>
现在,我想实现颗粒放置策略,以确保GameGrain
,PlayerGrain
和WeaponsGrain
在任何游戏实例中都与GameGrain
在同一个筒仓上被激活
如果你能提供一些建议,我应该怎么做,我会很感激的?
你可以用[PreferLocalPlacement]
属性标记一个谷物,如果你想把它和创建它的谷物放在同一个筒仓上。
其他的放置策略是可用的,你甚至可以写你自己的。关于这方面的更多信息,请阅读关于颗粒放置的文档。
由于存在与颗粒通信相关的成本,并且您非常关注此以考虑颗粒放置,那么您可能需要重新考虑哪些对象应该是颗粒。如果一个对象不需要被多个粒度访问,而是真正由一个粒度拥有,那么你可能只想让它成为同一个粒度的一部分。
例如,武器可以是玩家纹理中的武器集合中的一个对象。如果它需要改变所有权,对象可以发送给另一个玩家。