在 Akka 中控制消息发送

Control message sending in Akka

我正在使用 Akka 演员来模拟真实世界的情况。这取决于时间,所以我需要一种方法来介绍 simulated 时间的概念。例如,其中 1s real time = 1ms simulated time。通常消息按发送顺序到达(至少在默认调度程序和本地)。但是,我需要它们根据 模拟 时间按顺序到达。

远期消息可以先于近期消息发送,因为它包含 模拟 时间延迟。消息带有一个 sent 字段,提供消息发送的 模拟 时间。

例如,我可以阻止应该在未来到达的消息吗?通过在演员中保留等待名单并在适当的 simulated 时间到来时发布消息?

您还有其他建议吗?

在网上搜索 "discrete-event simulation"。 通常,实时与模拟时间无关,如“1s 实时 = 1ms 模拟”。相反,模拟时间使用优先级队列建模,其中优先级被视为模拟时间。除了目标地址之外,每条消息都具有时间值,表示它必须到达的模拟时间。所有消息首先被路由到优先级队列,然后模拟器将模拟时钟的读数更改为队列中最近的读数,与实际时间无关。为那个时间安排的所有消息都被路由到目的地,被处理,导致新消息被路由到优先级队列,然后时钟被移动到消息中引用的下一个时间。

由于消息发送的接口包含了模拟时间的值,它与Akka的接口不同,所以你不能直接使用Akka来完成你的任务。查看 List of discrete event simulation software 选择合适的库。