diff --git a/projects/25464650-ed5d-440e-b362-190f2852d451/NixMsg 依赖库行为核对结论(审核开发成果时用).md b/projects/25464650-ed5d-440e-b362-190f2852d451/NixMsg 依赖库行为核对结论(审核开发成果时用).md new file mode 100644 index 0000000..ae07472 --- /dev/null +++ b/projects/25464650-ed5d-440e-b362-190f2852d451/NixMsg 依赖库行为核对结论(审核开发成果时用).md @@ -0,0 +1,29 @@ +--- +title: NixMsg 依赖库行为核对结论(审核开发成果时用) +type: experience +permalink: main/projects/25464650-ed5d-440e-b362-190f2852d451/nix-msg-依赖库行为核对结论审核开发成果时用 +stable_id: 27e87e23-608c-4cae-8346-98e4fb300717 +scope: project +memory_type: experience +project_id: 25464650-ed5d-440e-b362-190f2852d451 +usage_profile_id: 0c9feb46-d06e-43cd-9ef0-c5813c84a998 +status: active +revision: 1 +request_id: nixmsg-20260930-0500-exp-libs +created_at: '2026-09-29T20:28:55.863385+00:00' +updated_at: '2026-09-29T20:28:55.863385+00:00' +tags: +- nixmsg +- mochi-mqtt +- websocket +- review +--- + +2026-09-30 对照主分支源码核对,已写入 DEVELOPMENT.md 0.2,审核开发组代码时重点检查: +- mochi-mqtt/server v2:OnConnect 返回 error 时不回 CONNACK 直接断开;OnConnectAuthenticate 返回 false 一律回 0x86(用户名或密码错误),SDK 会停止重连,所以数据库故障等内部错误必须在 OnConnect 里返回 error。心跳可在 OnConnect 里改 cl.State.Keepalive 并设 cl.State.ServerKeepalive=true。OnPublish 返回 packets.CodeSuccessIgnore 时 QoS1 照样回 PUBACK 且不转发;ErrRejectPacket 不回 PUBACK。下行包超过客户端 CONNECT 声明的 Maximum Packet Size 时在 WriteLoop 里静默丢弃(只有 debug 日志);inflight 达到 MaximumInflight 时新的 QoS1 下行也静默丢弃;OnPublishDropped 只在发送队列满时触发。会话接管先发 0x8E 再换连接,旧连接的 OnDisconnect 可能晚于新连接建立。EstablishConnection 会阻塞到连接结束。ReadPacket 当前为每个包复制新切片。 +- coder/websocket:Accept 默认做同源校验,浏览器跨域会 403,库文档建议用 InsecureSkipVerify 而不是 OriginPatterns=*;客户端不带子协议时 Accept 不拒绝,要自己查 c.Subprotocol();NetConn 会把读限制设为不限,RemoteAddr 是 TCP 对端。 +- autopaho:CleanStartOnInitialConnection 只管首次连接,要用 ConnectPacketBuilder 每次设 Clean Start;ConnectTimeout 默认 10 秒。 +- Go crypto/tls:服务端设了 NextProtos 而客户端声明的 ALPN 没有交集时会拒绝握手(例如 ALPN=mqtt 的设备)。 +- modernc sqlite 支持 _pragma=name(value) 和 _txlock=deferred|immediate|exclusive。 +- gopkg.in/yaml.v3 已于 2025 年 4 月停止维护;YAML 官方的 go.yaml.in/yaml/v3 冻结只收安全修复,v4 在 2026-09 仍是 rc。 +- OWASP argon2id 最低配置:19 MiB、t=2、p=1(或 46 MiB、t=1)。 \ No newline at end of file