0

TCP クライアントに Spring State Machine を使用することを考えています。プロトコル自体は指定され、メッセージ ID と長さフィールドを持つ独自の TCP メッセージに基づいています。クライアントはサーバーへの TCP 接続をセットアップし、メッセージを送信し、次のメッセージを送信する前に常に応答を待ちます。各状態では、特定の応答のみが許可されます。複数のクライアントを並行して実行する必要があります。

ここで、Spring State マシンに関連する次の質問があります。

1) 切断から接続への最初の移行中に、クライアントは java.net.Socket を介して接続をセットアップします。このソケット (またはソケットから取得した DataOutputStream および BufferedReader オブジェクト) を他の遷移のアクションで使用できるようにするにはどうすればよいですか?

この意味で、ソケットはステート マシンのある種のグローバル リソースになります。これまでに見た唯一の方法は、メッセージヘッダーに入れることです。しかし、これはあまり自然に見えません。

2) Spring State Machine にはどのランタイム環境が必要ですか?

JVM で十分ですか、それとも Tomcat が必要ですか?

スレッドセーフですか?

ありがとう、ヴォルフガング

4

1 に答える 1

0
  1. イベント ヘッダーを使用しても問題はありませんが、ヘッダーはイベント処理の間だけ存在するため、これらは実際にはグローバル リソースではありません。必要なオブジェクトをマシンに追加してextended state、すべてのアクションで使用できるようにします。
  2. JVM だけが必要です。デフォルトのマシン実行は同期であるため、スレッドの問題は発生しません。基礎となるエグゼキューターを非同期に置き換えたい場合は、ドキュメントにメモがあります (これは通常、複数の同時実行領域が使用されている場合に行われます)。
于 2016-11-28T11:12:11.433 に答える