7

我是 akka 和演员模式的新手,因此我不确定它是否符合我的需求。

我想用 akka 和数百万个可以相互影响的实体(认为是域对象 - 后来的参与者)创建一个模拟。因此,将模拟视为具有或多或少“模糊”结果的模拟,我们有一个包含实体的数组,其中每个实体都有速度,但会被实际实体前面的实体阻碍。当模拟开始时,每个实体应该移动 n 个域,或者,如果被其他实体阻止,则移动更少的域。我们有多次迭代,最后我们有一个新的顺序。这会重复几轮,直到我们想要看到领先实体的“快照”(然后可能在下一轮开始之前将其删除)。

所以我不明白我是否可以用akka创建它,因为:

是否有可能有每个演员的位置的全局列表,所以他们知道他们在哪个位置,哪些在他们面前?据我了解,这违反了演员的封装。我可以将演员的位置放在演员本身,但是我怎样才能看到/通知这个演员周围的演员呢?除此之外,全局列表会产生同步问题并影响性能,这与期望的行为完全相反(并且是 akka/actor-pattern 的补充)

我错过了什么?我必须寻找另一种设计方法吗?感谢您的建议。

更新:使用事件总线和分类器似乎也不是一种选择。参考文档

“因此它不适合订阅频率非常高的用例”

4

1 回答 1

2

演员模型非常适合您的场景。Actor 通过发送消息进行通信,因此每个 Actor 都可以向其邻居发送包含其位置的消息。当然,每个参与者都不可能知道系统中的每个其他参与者(无论如何都不是有效的),因此您还必须设计一个方案,通过该方案每个参与者都知道哪些是他的邻居。

至于获取系统的快照,只需要有一个人人皆知、人人皆知的中心参与者。

看起来你才刚刚开始接触演员。多读一点——akka 网站是一个很好的资源——如果需要,回来完善你的问题。

Your problem sounds like an n-body simulation sort of thing, so looking into that might help also.

于 2012-06-02T22:15:56.947 回答