diff --git a/CHANGELOG.md b/CHANGELOG.md index de1f66c..09d0475 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,8 @@ ### 修复 +- 升级官方 StreamFrame 2.4.0,采用 Connected 发布点的会话 epoch 收口, + 并获得 Passive 接受重试出锁与监听端口立即重绑加固。 - 升级官方 StreamFrame 2.3.1,修复迟到旧会话故障污染活会话状态、旧会话 绑定消息跨 Socket 错发,以及会话拆除时发送失败类型不稳定的问题。 - 串行化适配器的当前会话关闭与 transport 释放,避免已入队的迟到 diff --git a/Directory.Packages.props b/Directory.Packages.props index e5c7c44..98c8004 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -9,7 +9,7 @@ - + diff --git a/docs/ARCHITECTURE.md b/docs/ARCHITECTURE.md index da1849b..b4632fa 100644 --- a/docs/ARCHITECTURE.md +++ b/docs/ARCHITECTURE.md @@ -53,7 +53,8 @@ HSMS 会话切换后,旧会话的控制请求、数据事务和等待中的应 IHsmsTransport 使用单一事件流按 Session ID 报告会话打开、 帧到达和会话关闭。StreamFrameHsmsTransport 已在内部实现: -- 直接采用 StreamFrame 2.3.1 的单调 TCP Session ID; +- 直接采用 StreamFrame 2.4.0 的单调 TCP Session ID,并在 Connected + 发布点同步分配会话 epoch; - 通过会话感知接收流保留帧的原始 Session ID,迟到消费不会被标成新会话; - 会话绑定发送在 StreamFrame 原生 FIFO 中校验 Session ID,旧会话消息 不会重放,整帧写入本机 Socket 后才完成; @@ -65,8 +66,9 @@ HSMS 会话切换后,旧会话的控制请求、数据事务和等待中的应 这些能力仍隔离在 IHsmsTransport 后,不进入公共 API。此前 跟踪的 StreamFrame #38/#39 已在 2.3.0 完成迁移,2.3.1 进一步封闭迟到 -旧故障污染活会话和排队消息跨 Socket 错发的竞态;SecsFrame 只保留协议 -关闭原因和异常边界转换。详细失效模式与验证证据见 +旧故障污染活会话和排队消息跨 Socket 错发的竞态,2.4.0 又收口发布窗口 +旧 epoch 故障并加固 Passive 监听恢复;SecsFrame 只保留协议关闭原因和 +异常边界转换。详细失效模式与验证证据见 [STREAMFRAME-ADAPTER.md](STREAMFRAME-ADAPTER.md)。 ### 单线程会话状态机 diff --git a/docs/COMPATIBILITY.md b/docs/COMPATIBILITY.md index f643a16..217c364 100644 --- a/docs/COMPATIBILITY.md +++ b/docs/COMPATIBILITY.md @@ -20,9 +20,11 @@ ## 上游能力集成 StreamFrame #38(未完成帧超时)与 #39(会话感知发送确认及消息上下文) -已经随官方 StreamFrame 2.3.0 发布。SecsFrame 固定官方 2.3.1 NuGet 包, -包含迟到旧会话故障隔离、排队发送 Session ID 复核和稳定失效异常修复,并由 -内部 StreamFrameHsmsTransport 使用原生会话 API;此前基于 +已经随官方 StreamFrame 2.3.0 发布,2.3.1 随后补充迟到旧会话故障隔离、 +排队发送 Session ID 复核和稳定失效异常修复。SecsFrame 当前固定官方 +2.4.0 NuGet 包,进一步收口 Connected 发布点的会话 epoch,加固 Passive +接受重试与监听端口重绑。内部 +StreamFrameHsmsTransport 使用原生会话 API;此前基于 原始字节回调、发送信封和自建 Session ID 的临时实现已经删除。 这不是设备兼容模式: diff --git a/docs/ROADMAP.md b/docs/ROADMAP.md index e8666ae..fc3f9ee 100644 --- a/docs/ROADMAP.md +++ b/docs/ROADMAP.md @@ -10,8 +10,8 @@ - [x] 完整 SECS-II Item 类型、嵌套 List 和严格二进制编解码。 - [x] 动态 SecsMessage、可选单根 Item 与 HSMS Data Message Payload 编解码。 -- [x] 迁移到 StreamFrame 2.3.1 原生会话绑定、写出确认、会话竞态修复和 - 未完成帧超时。 +- [x] 迁移到 StreamFrame 2.4.0 原生会话绑定、写出确认、会话 epoch/监听 + 竞态修复和未完成帧超时。 - [x] Active/Passive 共用状态机的 Select/Select Response、Separate、 T6/T7、System Bytes 关联和会话失效处理。 - [x] Linktest、Reject、Deselect 控制消息与对应 T6 分支。 @@ -27,8 +27,9 @@ - [x] Host、Equipment 双角色端点及两种 Active/Passive 拓扑的双向回环。 阶段 1 的工程能力已经形成完整基础链路,StreamFrame #38/#39 的正式包 -迁移、2.3.1 会话隔离修复与等价测试已经完成。后续切片继续扩展 GEM 通用 -行为。任何标准默认值 +迁移与 2.3.1 会话隔离修复已经完成;当前固定 2.4.0,并继续验证发布窗口 +epoch 收口与 Passive 监听加固。后续切片继续扩展 GEM 通用行为。任何 +标准默认值 和完整合规结论都依赖团队合法获得的 E37/E37.1 及相关 GEM 标准副本与 一致性测试。 diff --git a/docs/STREAMFRAME-ADAPTER.md b/docs/STREAMFRAME-ADAPTER.md index 50f29e2..cd98083 100644 --- a/docs/STREAMFRAME-ADAPTER.md +++ b/docs/STREAMFRAME-ADAPTER.md @@ -2,7 +2,7 @@ ## 上游基线 -SecsFrame 固定依赖官方 [StreamFrame 2.3.1](https://www.nuget.org/packages/StreamFrame/2.3.1)。 +SecsFrame 固定依赖官方 [StreamFrame 2.4.0](https://www.nuget.org/packages/StreamFrame/2.4.0)。 2.3.0 已经解决此前跟踪的两项能力缺口: - [#38](https://github.com/CSJ608/StreamFrame/issues/38) / [PR #41](https://github.com/CSJ608/StreamFrame/pull/41): @@ -16,6 +16,15 @@ ID,残留的旧会话绑定消息以 SessionExpiredException 结 不会写入新 Socket。停机、Socket 释放及会话故障竞态也统一收敛到该异常 边界。详见 [2.3.1 发布说明](https://github.com/CSJ608/StreamFrame/releases/tag/v2.3.1)。 +2.4.0 不移除 SecsFrame 使用的会话感知公共接口。会话 epoch 改为与 Session +ID 一样在 Connected 发布点分配,闭合状态已经对外可见但会话任务尚未创建 +期间的旧 epoch 故障窗口;Passive 接受重试延迟移到锁外,并为监听 Socket +设置 SO_REUSEADDR,提高故障重试和立即重绑的跨平台稳定性。 +底层连接还会通过 System.Diagnostics.Metrics 的 +StreamFrame Meter 发出内置指标,但 SecsFrame 不把这些类型 +提升为公共 API。详见 +[2.4.0 发布说明](https://github.com/CSJ608/StreamFrame/releases/tag/v2.4.0)。 + SecsFrame 不再维护基于原始字节回调的 T8 监视器、发送确认计数器、会话 信封 codec 或自建 TCP Session ID。公共 API 和内部 IHsmsTransport 契约保持不变,上层 HSMS 状态机不直接依赖 @@ -73,7 +82,7 @@ StreamFrame 只在已有未完成帧时运行该超时:空闲连接和完整 分片帧收发、实际 T8 到期,以及会话替换时排队发送的精确失效与新 Socket 内容隔离;完整套件继续覆盖 T3/T6 从发送完成点启动以及旧会话不重放。 -这些测试证明当前工程契约与 StreamFrame 2.3.1 的互操作行为,不构成 +这些测试证明当前工程契约与 StreamFrame 2.4.0 的互操作行为,不构成 SEMI 合规声明。T5/T8 的标准默认值、精确启停边界和异常恢复仍须依据团队 合法获得的 SEMI E37/E37.1 版本及一致性测试核对。仓库不得提交标准正文、 表格或 Schema。