Releases
v2.0.0
Compare
Sorry, something went wrong.
No results found
破坏性变更
命名统一,消灭两个"codec"的混淆 :帧定界侧改名——IFrameCodec→IFramer、IStreamingFrameCodec→IStreamingFramer、LengthPrefixFrameCodec→LengthPrefixFramer、StxEtxFrameCodec→StxEtxFramer;"codec"一词从此只指帧内编解码 ICodec<TMessage>。
命名空间收敛 :删除 StreamFrame.Abstractions,所有公共类型统一进根命名空间 StreamFrame——用户只需一个 using StreamFrame;(此前具体实现类住在 "Abstractions" 命名空间里,名不副实)。
Start(ct) 的 ct 升级为生命周期令牌 :取消它会停止连接/重连并拆线(Disconnected 终态、GetMessages 自然结束、之后需新建连接),与 DisposeAsync 共用同一条幂等停机路径。1.x 中取消已连接的连接毫无作用且未如实文档化。
ConnectionState 新增 Disconnected 终态 :停机时广播;1.x 取消/停机后状态停留在 Connecting。
DeviceIpAddress→RemoteIpAddress(string?) :语义修正——主动模式为配置的远端地址,被动模式为已连接客户端地址(未连接为 null,不再返回魔法值 "NA");双栈下 IPv4 客户端地址归一显示为 IPv4。
IStreamConnection<TMessage> 新增 WaitForConnectedAsync (接口实现者需适配;此前 1.2.0 的 FrameError 已属破坏,一并归入 2.0)。
socket 改为 IPv6 双栈 (同一 socket 同时支持 IPv4/IPv6;监听 IPAddress.Any 自动按双栈处理)。1.x 仅 IPv4。
修复
主动模式连接失败重试不再泄漏 socket:ConnectAsync 失败/取消时立即释放本次尝试创建的 socket(此前每次失败重试泄漏一个,等终结器回收)。
CHANGELOG 底部版本对比链接补齐 [1.2.0] 并修正 [Unreleased] 指向(v1.2.0 发版时漏更新)。
变更
Start 重入防护:重复调用抛 InvalidOperationException(此前并发/重复 Start 会各自建立 socket 并互相覆盖,泄漏连接);重建连接请用 Reconnect()。
发布管线合并为单条流水线 release.yml:tag 触发"版本号校验 → 构建 → 测试 → GitHub Release → 推 nuget.org",测试未通过不会发包(此前发布与推送是两条独立 workflow,测试失败时包仍会被推出)。workflow_dispatch 手动触发仅做构建+测试演练,不发布;需重发版本时在对应 tag 的运行记录上 Re-run(推送带 --skip-duplicate,幂等)。
tag 与两个 csproj 的 <Version> 一致性在流水线中显式校验,不一致直接失败(此前会静默发出错误版本号的包)。
新增
代码质量棘轮:引入 Meziantou.Analyzer(SDK 自带 NetAnalyzers 之上的补充规则)与 .editorconfig,现存告警清零并把库项目的 TreatWarningsAsErrors 打开(告警即构建失败);FrameErrorKind/DecodeErrorPolicy 拆分为独立文件(一类型一文件)。
WaitForConnectedAsync:等待连接进入 Connected(已连接立即完成;取消或 Dispose 以取消结束),替代轮询状态或 Task.Delay 盲等;demo 全部改用该 API。
可选 ILogger 构造参数:连接重试、会话故障、用户回调异常等内部事件输出到日志(此前 Debug.WriteLine 在 Release 构建中完全不可见,生产排障只能靠猜)。
ReceiveQueueCapacity 选项:接收消息通道可设上限(默认 0 不限制);消费慢时解码暂停读取、TCP 背压自然传导到对端,封堵慢消费者导致的内存无限增长。
选项构造校验:非法取值(负延迟、0 队列容量等)在构造时抛清晰的 ArgumentOutOfRangeException(此前在运行中的重连/收发路径深处抛难定位的异常)。
LICENSE 文件(MIT 此前只在 README 与包元数据中声明,仓库内无正文)。
push / PR 持续集成 ci.yml(构建 + 测试),回归不再等到发版才暴露。
You can’t perform that action at this time.