Skip to content

v2.4.0

Choose a tag to compare

@github-actions github-actions released this 29 Aug 03:14
· 22 commits to main since this release

新增

  • 内置指标(Meter StreamFrame,System.Diagnostics.Metrics,零外部依赖):帧/字节收发计数(streamframe.frames_sent/received、bytes_sent/received)、重连次数(reconnects)、会话时长(session_duration 直方图)、发送队列水位(send_queue_length 直方图,入队采样);单一 endpoint 标签,订阅方式与仪器清单见 README"内置指标"。netstandard2.0 目标经 System.Diagnostics.DiagnosticSource 包获得同款 API(netfx 可用)。
  • 浸泡/混沌测试套件(默认不运行):STREAMFRAME_SOAK_SECONDS=<秒> dotnet test --filter FullyQualifiedName~Soak 手动启用——长时间消息流完整性(顺序/无丢失/无重复)与随机故障混沌(对端 FIN/RST 死亡 + 半帧注入 + 绑定/普通发送突发,终局核对无悬挂、普通消息跨会话续发送达、绑定消息无重复投递)。已在本机通过 20s/60s 两档验证。

变更

  • StxEtxFramer 切帧向量化:net8+ 用 SearchValues 一次跳到最近的 STX/ETX 候选(不含候选的整段字节直接跳过),实测 ≈1.1 µs/帧 → ≈50 ns/帧(约 22 倍);netstandard2.0 目标保留逐字节实现,语义逐字节等价(两套独立实现,现有 StxEtx/FrameDecoder 测试全绿)。README/bench 性能数据以 2026-08-28 重跑刷新(含内置指标的真实路径)。
  • 会话纪元(epoch)改为在 Connected 发布点分配(与会话编号同点),彻底闭合"发布后、任务未创建"窗口内旧纪元幽灵故障卷入新生会话的瞬态误杀(v2.3.0 评审附带发现);发布窗口注入幽灵的回归测试锁定该行为。
  • demo 新增场景 5:会话感知收发(编号生命周期、整帧写完才完成、旧会话发送失效不重放、新会话照常收发)。
  • 基准矩阵扩容 + 性能文档重写:新增内置指标开销微基准(0.5–1.0 ns/次、零分配)、裸 TCP 地板基准(框架税:小消息反而快于裸写 13–52%,64KB 约 3–4×)、会话感知/接收视图/未完成帧超时的三轮对比(SendInSessionAsync ≈2× SendAsync、+≈470 B/条;其余无可测差异);端到端吞吐参数化到 64B/1KB/64KB 两轮区间。bench/README 全量刷新(环境、噪声披露、框架税绝对+百分比并列),README 双语性能摘要同步。

修复

  • 被动端监听韧性加固(#47,防御性):排查确认原始"用户 Reconnect() 竞速楔死监听"无法复现(顺序/并发两组确定性复现 + 混沌套件恢复该动作后多轮全绿,此前观察到的楔死系当时测试自身缺陷),但修复排查中识别的两个真实弱点——① 接受循环的重试延迟改为锁外等待(旧实现整个重试循环持有 _acceptLock,绑定/接受持续失败期间会堵死其它接受循环);② 监听 socket 设置 SO_REUSEADDR(服务端主动关闭后立即重绑不受 2MSL/TIME_WAIT 限制;Windows 实测宽松,Linux 上无此选项会遇 EADDRINUSE,一并设置保持跨平台一致)。新增确定性回归测试(8 轮服务端主动重连,端口须秒级可重新接受),混沌套件恢复用户重连动作。