0

我正在考虑将 Spring State Machine 用于 TCP 客户端。协议本身是基于具有消息 id 和长度字段的专有 TCP 消息给出的。客户端与服务器建立 TCP 连接,发送一条消息,并在发送下一条消息之前始终等待响应。在每个州,只允许某些响应。多个客户端必须并行运行。

现在我有以下与 Spring State machine 相关的问题。

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 回答