flutter_stompsocket 0.1.1
flutter_stompsocket: ^0.1.1 copied to clipboard
Production-ready STOMP-over-WebSocket client for Flutter: shared-parse callbacks, auto re-subscribe on reconnect, offline send buffering, auto/manual ack.
0.1.1 #
- Fix: 二进制误判导致文本消息解析失败。
stomp_dart_client的 parser 在content-type为application/octet-stream或缺失时都会把 body 归入binaryBody——而 ActiveMQ 等服务端常不写content-type,导致纯 JSON 文本也 被当成二进制、走进binaryDecoder(没配就直接解析失败)。现在:显式标注octet-stream才走二进制快路径;其余一律先做严格 UTF-8 解码探测,成功就走 文本解析,只有结构上违反 UTF-8(压缩/真二进制数据)才落回binaryDecoder。 - Fix: 大包异步解析期间断线重连,可能对旧会话误发 ACK/NACK。 smart 模式的
自动应答原本没有会话代次校验(manual 模式已有):一个大包在后台 isolate 解析
期间断线又重连,
_onConnect复用同一批_Subscription对象导致identical()检查通过,client.connected也变回 true,于是照常发出携带旧 会话 ack id 的 ACK/NACK,服务端认不出来。现在在消息到达时捕获会话代次, 贯穿_dispatch/_sendAck,代次变了就跳过应答。 - Change:
resumeOnForeground默认值改为true(对齐@codejoo/stomp)。 移动端恰恰是回前台重连最要紧的场景(系统会挂起后台定时器),默认关闭反而 反直觉。仍需运行在已初始化WidgetsBinding的 Flutter App 中;纯 Dart 场景 可显式设为false。 - Fix: 自动去重键的分隔符会截断 STOMP 帧。 不传
id时用于合并订阅的确定性 键会被当作 STOMP 的id头发上线,原来用\x00分隔——NUL 是 STOMP 帧终止 符,出现在 header 里会把整帧从中间截断(服务端报 "malformed frame")。改用\x1f(单元分隔符),同@codejoo/stomp的修法。
0.1.0 #
- 首次发布。对
stomp_dart_client的二次封装,提供:- 函数队列共享解析(相同 id 的多回调共用一份解析数据)
- 三种取消:句柄
unsubscribe()/ 按 id / 按 destination /clear() - 断线自动重连(库)+ 重连后自动重新订阅(本封装)
send()+ 未连接离线缓冲AckMode { auto, smart, manual }:不应答 / 自动应答 / 手动应答(AckControl)- 可注入的二进制解码器
binaryDecoder beforeConnect连接前刷新 token- 连接状态
ValueListenable+onStateChanged resumeOnForeground:回前台强制重连copyWith与stomp_dart_client原生参数透传