python 状态机框架_初试SpringStateMachine框架实现状态机

本文介绍了如何使用SpringStateMachine框架在Python中实现状态机。通过添加相关依赖,定义订单状态和事件,以及配置状态迁移,展示了如何创建并运行一个简单的订单流程。日志输出显示了状态的变化,从待支付到支付再到收货。文章末尾提到SpringStateMachine还有更多功能等待进一步探索。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ab4bd35336d96b5520165304b5309800.png

官网这里列出了很多特性,说的就是易于使用的状态机,帮助开发者简化状态机的开发过程,让状态机结构更加层次化。

状态机

有限状态机(FSM),简称状态机,是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型。

状态存储关于过去的信息,就是说:它反映从系统开始到现在时刻的输入变化。转移指示状态变更,并且用必须满足来确使转移发生的条件来描述它。动作是在给定时刻要进行的活动的描述。

写一个demo

cf14ab5bb10947204e0e155aec5b5a7d.png

在pom.xml中加入依赖:

7f40fd15205135fe70d29d7e6e294ee7.png

定义订单状态

4871a2ed34370f32672cfd8b82439041.png

订单事件:

0ee87911ab948a03676844131e5dd21c.png

然后写一个配置类:

ac90221462690ae7510eeae311492989.png

@EnableStateMachine注解用来启用Spring StateMachine状态机功能

configure(StateMachineStateConfigurer states)方法用来初始化当前状态机拥有哪些状态

configure(StateMachineTransitionConfigurer transitions)方法用来初始化当前状态机有哪些状态迁移动作,其中命名中我们很容易理解每一个迁移动作,都有来源状态source,目标状态target以及触发事件event。

然后写个 Application 类:

41def4d570dfc9a75c236335cc84f6e0.png

日志输出:

409eab8270f3446acfeb59f0b0ba3cae.png

在run函数中,我们定义了整个流程的处理过程,其中start()就是创建这个订单流程,根据之前的定义,该订单会处于待支付状态,然后通过调用sendEvent(Events.PAY)执行支付操作,最后通过掉用sendEvent(Events.RECEIVE)来完成收货操作。

有以下模块可供选择使用

d9f817449b127fcd2c5c42db3e4893fc.png

这只是根据文档尝试一下,statemachine还有很多内容,以后再续!

有什么讨论的内容,可以加我公众号:

47a3dcc562b7ac3288a41240a9e62b6d.png

### SYN置位的含义及作用 在传输控制协议(TCP)中,SYN标志位是一个重要的状态标记,用于初始化两个设备之间的连接握手过程。具体来说,在三次握手过程中,SYN标志位的作用如下: #### 1. **SYN标志位的功能** SYN(Synchronize Sequence Numbers)表示同步序列号,主要用于建立一个新的TCP连接。当客户端希望与服务器建立连接时,会发送一个带有SYN标志位设置为1的数据包给目标主机[^2]。 - 客户端向服务器发起请求时,会在初始数据包中将SYN标志位置为1,并附带一个随机生成的初始序列号 `ISN` (Initial Sequence Number),表明这是第一次尝试建立连接。 - 接收到此SYN包后,如果服务器愿意接受该连接,则回应另一个包含自己新的 ISN 的 ACK 数据包同时也把其自身的 SYN 设置成 1 来继续完成第二次握手动作[^1]。 #### 2. **三次握手中的角色** 以下是关于如何通过三个阶段实现可靠通信的具体描述: - **第一步**: 发起方(Alice) 向接收者(Bob) 发送只有SYN=1而没有携带任何有效载荷的一个特殊类型的段(Segment), 并指定自己的初试序数 X. - **第二步**: Bob 收到 Alice 的 SYN 请求之后, 如果同意建立链接的话, 就返回一个同时具有ACK 和 SYN 字段都等于一的新消息, 这里包含了确认号码 Y = X + 1 表明已经收到了来自对方的第一个字节流起点信息以及他自己选定作为对话基础使用的另一套独立编号 Z. - **第三步**: 最终,Alice 再次回复一条单纯具备ACK属性的消息回传至Bob处, 此刻整个流程结束并正式开启双向交互模式下的稳定链路环境.[^2] 这种机制确保双方都能清楚彼此的状态并且可以安全地交换后续的信息内容. ```python # Example of a simple TCP handshake simulation using Python's socket library import socket def tcp_handshake(host, port): try: sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server_address = (host, port) # Step 1: Client sends SYN flag implicitly during connect() print(f"Connecting to {server_address}") sock.connect(server_address) # After successful connection establishment via three-way handshake, # further communication may occur here... sock.close() except Exception as e: print(e) if __name__ == "__main__": tcp_handshake('localhost', 8080) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值