2012-03-20 58 views
7

我是新来的阿卡和演员模式,因此我不知道它是否符合我的需求。阿卡模拟

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

所以我不明白,如果我可以创建这个用阿卡,因为:

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

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

更新:使用事件总线和分类器似乎也不是一种选择。指的的documentation

“因此它并不适合用在订阅具有非常高的频率,来改变的情况下”

回答

2

的角色模型是一个很好的适合您的方案。参与者通过发送消息进行通信,因此每个演员可以将消息发送给包含其位置的邻居。当然,每个演员不可能知道系统中的其他演员(无论如何都不会有效),因此您还必须制定一个计划,但每个演员都知道哪个是他的邻居。

至于获取系统的快照,只需拥有一个众所周知的中央演员,并且知道每个人。

看起来你刚刚开始与演员。多读一点 - akka网站是一个很好的资源 - 如果需要的话,回来再细化你的问题。

你的问题听起来像一个n-body simulation种事情,所以看着这可能也有帮助。

+0

我们决定为我们的问题使用不同的解决方案。不过我认为你的建议模式听起来很有希望。也感谢n-body的参考。 – Dag 2012-06-20 15:24:43