問題タブ [akka-fsm]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
akka - Akka FSM タイムアウト通知
ゲームのロジック/状態自体が Akka FSM アクターによって管理されるゲームを開発しています。私の状態の 1 つは、WaitingForAnswer
この状態に関連するビジネス ロジックは、プレーヤー (俳優でもある)は20 秒以内に応答する必要があるというものです。だから私はこのように状態を定義しました:
ここまでは順調ですね。ここでやりたいことは、何らかのリマインダーを用意することです。状態タイムアウトの半分が経過した後 (10 秒後)、プレーヤーにリマインダーを送信して、すぐに回答する必要があることを伝えたいと考えています。
私のアイデア:
を10 秒に設定し
setTimer(name, msg, interval, repeat)
て状態に入るときに使用します。このようにして、私の FSM アクターは、プレーヤー アクターに思い出させることを思い出させるリマインダを受け取ります。ご覧のとおり、これは少し...まあクールではありません。WaitingForAnswer
interval
スケジューラーを使用して、私の FSM アクターが
WaitingForAnswer
ステートに入ったら、プレーヤー アクターを受信者として、10 秒先のメッセージをスケジュールします。もちろん、この場合、プレーヤー アクターが時間内に応答したときに、スケジュールされたメッセージをキャンセルする必要があります。
これを達成するための他のより自然な方法はありますか? 何かのフック?setTimer
別の受信者で使用する方法はありますか?
scala - これらのパターン マッチングの例をどのように説明しますか?
FSM でいくつかのイベントを書きましたが、パターン マッチングでは説明できないことがわかりました。以下は完全に合法であると考えました。つまり、このアクターに vector[A] または vector[B] のメッセージを送信できます。
ただし、アクターに vector[B] メッセージを送信すると、
したがって、基本的には、次のイベントが一致する場合でも、最初のイベントに一致しようとします。
さらに単純なパターン マッチの例を作成しようとしました。
}
これは実際には合法ではありません。
ただし、次のキャストを行うと、コードを実行できます。
私が奇妙に感じるのは、Any は String に一致する可能性があると言っているようですが、print は java.lang.Integer であるということです。したがって、Vector[Any] であると言う vector[Int] があると考える必要があります。Vector[Any] は Vector[String] である可能性があるため、そのパターンに一致し、実際には vector[ であるためです。 Int] Vector[Any] としてマスクし、印刷も問題ありません。
誰かがこれらのパターンマッチングの観察を説明できますか?
また、状態が Vector[A] と Vector[B] の両方のメッセージを処理できるようにするには、メッセージをどのように設定すればよいですか?
scala - Akka FSM で `receive` をオーバーライドしても安全ですか?
Akka で FSM を作成しました。ただし、私の FSM は、その FSM 状態に関連するメッセージが渡されるだけではありません。その子もActorRef
それに s を渡すことができ、私の FSM はそれをさらにその親に渡す必要があります。receive
Akka の FSM は (当然のことながら) アクターでもあるため、それらをキャッチするためにオーバーライドしたいと思いますActorRefs
。ただし、これを行うと、アクターの FSM 機能が壊れてしまいます。このような状況を処理する適切な方法は何ですか?
akka - Akka FSM Testkit が *starting state* を正しくキャッチしない
私は Akka FSM を使用して動いているエレベーターをシミュレートしています (あなたはもう行くつもりはありません! :-))、通常のテストキット機能を使用して FSM をテストしようとしていますが、私の理解または公開されている FSM の動作にはギャップがあるようです(または両方)。
コードの関連部分は次のとおりです。
CurrentState メッセージが作成されてstartWith関数が呼び出された直後に、FSM が CurrentState メッセージで応答すると予想されますが、そうはなりません。このテスト (再び部分的なコード) は失敗します。
したがって:
私の理解にギャップはありますか?もしそうなら、私を教育してください。
また、まったく同じ質問 (ここでより要約された形式で質問されています) が未回答のままになっていることもわかります。これは、対処する価値のあるAkka FSM と Testkit のセマンティクスのギャップではないでしょうか? :-P
java - apply メソッドを使用した Akka Persistent FSM アクターのテスト
Java API を使用して AKKA で FSM モデルを開発しようとしています。この機能を単体テストしたいと思います。ラムダをサポートする Akka FSM アクターの単体テストに関する多数の例を調べましたが、同じ.applyingおよび.andthenメソッドをテストする関連する例を見つけることができなかったので、テストがカスタムをカバーしていることを確認できますDomainEventB のパラメーターから派生した処理ロジック。
できればJavaのヘルプ/リソースをいただければ幸いです。