【问题标题】:Akka FSM timeout notificationAkka FSM 超时通知
【发布时间】:2016-07-14 17:26:27
【问题描述】:

我正在开发一款游戏,其中游戏逻辑/状态本身由 Akka FSM 演员管理。我的状态之一是WaitingForAnswer,与此状态相关的业务逻辑是玩家(也是演员)必须在 20 秒内回答,否则他/她将失去一分。所以我这样定义状态:

when(WaitingForAnswer, 20 seconds) {
    // event handling logic here
}

到目前为止一切顺利。现在我想做的是有某种提醒 - 在状态超时的一半过去后(10 秒后),我想向玩家发送一个 提醒,他必须回答很快。

我的想法:

  1. 在进入WaitingForAnswer 状态时使用setTimer(name, msg, interval, repeat),将interval 设置为10 秒。这样我的 FSM 演员就会得到一个提醒,提醒他提醒玩家演员。如您所见,这有点……不太酷。

  2. 使用调度程序,一旦我的 FSM 演员进入WaitingForAnswer 状态,安排一条消息在未来 10 秒内以玩家演员作为收件人。当然,在这种情况下,我必须确保在玩家actor及时响应时取消预定的消息。

还有其他更自然的方法来实现这一点吗?某种钩子?以某种方式将setTimer 用于不同的收件人?

【问题讨论】:

    标签: akka akka-fsm


    【解决方案1】:

    您解释问题的方式,似乎您的状态 WaitingForAnswer 实际上是 2 个行为非常相似的不同状态。您可以将状态超时定义为 10 秒,如果玩家回答,则应用逻辑,否则,您将状态转换到 WaitingForAnswerAfterReminder,并再次使用 10 秒的状态超时,这由与以前的状态。

    在我看来,您尝试在 WaitingForAnswer 中模拟两种状态:提醒之前和之后。

    【讨论】:

    • 谢谢,何塞普。我实际上审查了您关于 Akka 游戏开发的演示文稿 :) 无论如何,由于需求略有变化,我最终在客户端实现了提醒,但总的来说我喜欢您的想法!
    • 很高兴你喜欢它!
    猜你喜欢
    • 2015-12-20
    • 1970-01-01
    • 2015-08-31
    • 2017-03-13
    • 2019-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多