2
我試圖在Akka中使用FSM來模擬協議的狀態(握手,傳輸,有效負載解碼等)。我想定義類似於超時的東西,但是以「已處理字節」的形式定義(例如,如果在處理完n
字節後我仍處於相同狀態,請離開此處)。簡單地說,我想重新定義stateTimeout
屬性的行爲。任何想法如何地道地實現這一點?Akka FSM通過非時間測量的「超時」(斯卡拉)
我試圖在Akka中使用FSM來模擬協議的狀態(握手,傳輸,有效負載解碼等)。我想定義類似於超時的東西,但是以「已處理字節」的形式定義(例如,如果在處理完n
字節後我仍處於相同狀態,請離開此處)。簡單地說,我想重新定義stateTimeout
屬性的行爲。任何想法如何地道地實現這一點?Akka FSM通過非時間測量的「超時」(斯卡拉)
假設你有一個特定的狀態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 ,這比我想要的更加冗長。我發現這很有用,會考慮如何使它更容易。
你總是可以將兩部分分成幾個方法... – 2012-03-29 23:48:10
字節是否作爲actor消息進來,所以你可以數它們並決定切換狀態? – 2012-03-29 14:09:20
否: - \它是演員狀態的一部分,知道到目前爲止消耗了多少字節。 – 2012-03-29 14:12:40