Akka FSM通过非时间测量的“超时”(斯卡拉)

Akka FSM通过非时间测量的“超时”(斯卡拉)

问题描述:

我试图在Akka中使用FSM来模拟协议的状态(握手,传输,有效负载解码等)。我想定义类似于超时的东西,但是以“已处理字节”的形式定义(例如,如果在处理完n字节后我仍处于相同状态,请离开此处)。简单地说,我想重新定义stateTimeout属性的行为。任何想法如何地道地实现这一点?Akka FSM通过非时间测量的“超时”(斯卡拉)

+0

字节是否作为actor消息进来,所以你可以数它们并决定切换状态? – 2012-03-29 14:09:20

+0

否: - \它是演员状态的一部分,知道到目前为止消耗了多少字节。 – 2012-03-29 14:12:40

假设你有一个特定的状态X和这就决定了“时间到了”,你可以做这样的事情的方法def isDone(x: D): Boolean

when(X) (({ 
    case Event(...) => ... 
    ... 
}: StateFunction) andThen { 
    case State(_, data, _, _, _) if isDone(data) => // return new state 
    case x => x 
}) 

不幸的是类型归属是必要的,andThen需要一个完整的功能1 ,这比我想要的更加冗长。我发现这很有用,会考虑如何使它更容易。

+0

你总是可以将两部分分成几个方法... – 2012-03-29 23:48:10