[{"data":1,"prerenderedAt":30},["Reactive",2],{"9CjX7RyquN":3,"byfm0sXfUY":27},{"items":4,"meta":23},[5,8,11,14,17,20],{"title":6,"titleUrl":7},"如何在 Python3 中使用 MQTT 客户端库 Paho Client","how-to-use-mqtt-in-python",{"title":9,"titleUrl":10},"MQTT服务器（MQTT Broker）：工作原理与快速入门指南","the-ultimate-guide-to-mqtt-broker-comparison",{"title":12,"titleUrl":13},"MQTT QoS 0、1、2 解析：快速入门指南","introduction-to-mqtt-qos",{"title":15,"titleUrl":16},"在 ESP32 上使用 MQTT：入门指南","esp32-connects-to-the-free-public-mqtt-broker",{"title":18,"titleUrl":19},"MQTT 主题与通配符（Topics & Wildcards）入门手册","advanced-features-of-mqtt-topics",{"title":21,"titleUrl":22},"车联网 CAN Bus 协议介绍与数据实时流处理","can-bus-how-it-works-pros-and-cons",{"count":24,"limit":25,"page":26},6,7,1,{"changelog":28,"createAt":29},"\u003Cp>NanoMQ 0.25.5 is ready now! We continue to serve the community by providing swift feedback to feature requests and security issue reports. Fixing multiple minor security issues, adding a new \u003Ccode>batch_resend\u003C/code> option for rapid local QoS msg resend, and a new \u003Ccode>nolocal\u003C/code> param for bridging client.\u003C/p>\n\u003Cp>Attention! From 0.25.5, we drop the official binary release of MIPS &amp; ARMel arch due to the incompatibility between Github 24.04 runner &amp; newer MsQuic dependencies. Have to stick with times.\u003C/p>\n\u003Cp>AI generated release notes:\u003C/p>\n\u003Cp>NanoMQ v0.25.5 is a feature-enhancement and maintenance release focusing on hot-reloading capabilities, observability, and underlying protocol stability in the NanoNNG transport layer.\u003C/p>\n\u003Ch3>Core Features &amp; Enhancements\u003C/h3>\n\u003Cp>\u003Cstrong>Lock-free Configuration Reloading:\u003C/strong> Introduced a lock-free, hazard-pointer reclamation mechanism for applying ACL-file changes via nanomq reload. Additionally, dynamic reloading for log levels is now fully supported.\u003C/p>\n\u003Cp>\u003Cstrong>QoS &amp; Resend Architecture:\u003C/strong> Implemented a new batch_resend policy. The QoS ACK handling logic has been structurally improved by moving it from the transport layer directly into the protocol layer.\u003C/p>\n\u003Cp>\u003Cstrong>State Machine Consolidation:\u003C/strong> Refactored and consolidated the internal state machine within broker.c to streamline connection lifecycle management.\u003C/p>\n\u003Cp>\u003Cstrong>Protocol Support: Added support for overwriting the No Local flag.\u003C/strong>\u003C/p>\n\u003Ch3>Stability &amp; Bug Fixes\u003C/h3>\n\u003Cp>\u003Cstrong>MQTT over WebSocket (mqtt_ws):\u003C/strong> Fixed critical AIO (Asynchronous I/O) state issues. Resolved a bug where qsaio ack-send callbacks could trigger a double-finish on user tx AIO, and ensured recv/send AIO completes correctly upon cancellation to prevent pipe-reaping deadlocks.\u003C/p>\n\u003Cp>\u003Cstrong>Shared Subscriptions:\u003C/strong> Fixed a storage bug to ensure offline QoS messages for shared subscriptions are accurately routed to cached sessions.\u003C/p>\n\u003Cp>\u003Cstrong>Memory &amp; Concurrency:\u003C/strong> Resolved SQLite QoS message memory leaks within the resend loop and patched multiple data races flagged by ThreadSanitizer (TSan).\u003C/p>\n\u003Ch3>Observability &amp; Tooling\u003C/h3>\n\u003Cp>\u003Cstrong>Enhanced Logging:\u003C/strong> Security and debugging logs are now much more granular. ACL deny logs now actively include the clientid, username, and target topic. Furthermore, publisher clientid and username are now appended to per-message debug lines.\u003C/p>\n\u003Cp>\u003Cstrong>CI/CD &amp; Build:\u003C/strong> Repaired broken CI workflows caused by MSQUIC API changes and the GitHub deprecation of Ubuntu 20.04 runners. Updated default and CI configurations to explicitly set max_topic_alias.\u003C/p>\n\u003Ch3>Community Acknowledgements\u003C/h3>\n\u003Cp>Thanks to our new contributors @jayenashar and @ingwinlu for their valuable fixes and documentation additions. Expensive Fable5 token appreciated.\u003C/p>\n\u003Ch2>What's Changed in NanoMQ\u003C/h2>\n\u003Cul>\n\u003Cli>Apply ACL-file changes on \u003Ccode>nanomq reload\u003C/code> (lock-free, hazard-pointer reclamation) by @jayenashar in \u003Ca href=\"https://github.com/nanomq/nanomq/pull/2376\">https://github.com/nanomq/nanomq/pull/2376\u003C/a>\u003C/li>\n\u003Cli>Bump actions/cache from 5.0.2 to 6.1.0 by @dependabot[bot] in \u003Ca href=\"https://github.com/nanomq/nanomq/pull/2368\">https://github.com/nanomq/nanomq/pull/2368\u003C/a>\u003C/li>\n\u003Cli>Bump docker/setup-buildx-action from 4.0.0 to 4.2.0 by @dependabot[bot] in \u003Ca href=\"https://github.com/nanomq/nanomq/pull/2370\">https://github.com/nanomq/nanomq/pull/2370\u003C/a>\u003C/li>\n\u003Cli>docs: HTTP acl_req authorizes PUBLISH and SUBSCRIBE by @ingwinlu in \u003Ca href=\"https://github.com/nanomq/nanomq/pull/2354\">https://github.com/nanomq/nanomq/pull/2354\u003C/a>\u003C/li>\n\u003Cli>\u003Cul>\n\u003Cli>FIX [cli] Sleep 500ms before pub cli exit &amp; Fixed a compile warning missing header file. by @wanghaEMQ in \u003Ca href=\"https://github.com/nanomq/nanomq/pull/2379\">https://github.com/nanomq/nanomq/pull/2379\u003C/a>\u003C/li>\n\u003C/ul>\n\u003C/li>\n\u003Cli>rework on logging reload feature by @JaylinYu in \u003Ca href=\"https://github.com/nanomq/nanomq/pull/2380\">https://github.com/nanomq/nanomq/pull/2380\u003C/a>\u003C/li>\n\u003Cli>fix(conf): set max_topic_alias in default and CI configs by @jayenashar in \u003Ca href=\"https://github.com/nanomq/nanomq/pull/2377\">https://github.com/nanomq/nanomq/pull/2377\u003C/a>\u003C/li>\n\u003Cli>\u003Cul>\n\u003Cli>DOC add new docs about reload log level by @JaylinYu in \u003Ca href=\"https://github.com/nanomq/nanomq/pull/2382\">https://github.com/nanomq/nanomq/pull/2382\u003C/a>\u003C/li>\n\u003C/ul>\n\u003C/li>\n\u003Cli>\u003Cul>\n\u003Cli>FIX [acl] include clientid, username and topic in acl deny log by @jayenashar in \u003Ca href=\"https://github.com/nanomq/nanomq/pull/2385\">https://github.com/nanomq/nanomq/pull/2385\u003C/a>\u003C/li>\n\u003C/ul>\n\u003C/li>\n\u003Cli>\u003Cul>\n\u003Cli>NEW [log] log publisher clientid and username in per-message debug lines by @jayenashar in \u003Ca href=\"https://github.com/nanomq/nanomq/pull/2387\">https://github.com/nanomq/nanomq/pull/2387\u003C/a>\u003C/li>\n\u003C/ul>\n\u003C/li>\n\u003Cli>\u003Cul>\n\u003Cli>FIX [ci] authenticate latest-tag lookup to avoid anonymous rate limit by @jayenashar in \u003Ca href=\"https://github.com/nanomq/nanomq/pull/2389\">https://github.com/nanomq/nanomq/pull/2389\u003C/a>\u003C/li>\n\u003C/ul>\n\u003C/li>\n\u003Cli>NNG Bridge: Sync with the \u003Ccode>sdv_master\u003C/code> branch by @alvin1221 in \u003Ca href=\"https://github.com/nanomq/nanomq/pull/2383\">https://github.com/nanomq/nanomq/pull/2383\u003C/a>\u003C/li>\n\u003Cli>consolidate the state machin in broker.c by @JaylinYu in \u003Ca href=\"https://github.com/nanomq/nanomq/pull/2396\">https://github.com/nanomq/nanomq/pull/2396\u003C/a>\u003C/li>\n\u003Cli>\u003Cul>\n\u003Cli>FIX [test] make the function test CI suite reliable again by @jayenashar in \u003Ca href=\"https://github.com/nanomq/nanomq/pull/2388\">https://github.com/nanomq/nanomq/pull/2388\u003C/a>\u003C/li>\n\u003C/ul>\n\u003C/li>\n\u003Cli>FIx broken CI Build packages workflow caused by new ver of msquic &amp; ubuntu 20.0 runner is dropped by github by @JaylinYu in \u003Ca href=\"https://github.com/nanomq/nanomq/pull/2401\">https://github.com/nanomq/nanomq/pull/2401\u003C/a>\u003C/li>\n\u003C/ul>\n\u003Ch2>New Contributors\u003C/h2>\n\u003Cul>\n\u003Cli>@jayenashar made their first contribution in \u003Ca href=\"https://github.com/nanomq/nanomq/pull/2376\">https://github.com/nanomq/nanomq/pull/2376\u003C/a>\u003C/li>\n\u003Cli>@ingwinlu made their first contribution in \u003Ca href=\"https://github.com/nanomq/nanomq/pull/2354\">https://github.com/nanomq/nanomq/pull/2354\u003C/a>\u003C/li>\n\u003C/ul>\n\u003Cp>\u003Cstrong>Full Changelog\u003C/strong>: \u003Ca href=\"https://github.com/nanomq/nanomq/compare/0.25.3...0.25.5\">https://github.com/nanomq/nanomq/compare/0.25.3...0.25.5\u003C/a>\u003C/p>\n\u003Ch2>What's Changed in NanoNNG\u003C/h2>\n\u003Cul>\n\u003Cli>fix nanomq issue 2242 by @wanghaEMQ in \u003Ca href=\"https://github.com/nanomq/NanoNNG/pull/1478\">https://github.com/nanomq/NanoNNG/pull/1478\u003C/a>\u003C/li>\n\u003Cli>reload log level by @JaylinYu in \u003Ca href=\"https://github.com/nanomq/NanoNNG/pull/1568\">https://github.com/nanomq/NanoNNG/pull/1568\u003C/a>\u003C/li>\n\u003Cli>rewok of PR#1569 by @JaylinYu in \u003Ca href=\"https://github.com/nanomq/NanoNNG/pull/1571\">https://github.com/nanomq/NanoNNG/pull/1571\u003C/a>\u003C/li>\n\u003Cli>\u003Cul>\n\u003Cli>FIX [broker] store offline shared-subscription QoS msgs for cached sessions by @ingwinlu in \u003Ca href=\"https://github.com/nanomq/NanoNNG/pull/1564\">https://github.com/nanomq/NanoNNG/pull/1564\u003C/a>\u003C/li>\n\u003C/ul>\n\u003C/li>\n\u003Cli>\u003Cul>\n\u003Cli>FIX [broker] free expired sqlite QoS msg in resend getopt loop by @ingwinlu in \u003Ca href=\"https://github.com/nanomq/NanoNNG/pull/1573\">https://github.com/nanomq/NanoNNG/pull/1573\u003C/a>\u003C/li>\n\u003C/ul>\n\u003C/li>\n\u003Cli>\u003Cul>\n\u003Cli>FIX [broker] resolve TSan data races behind the red sanitize job by @ingwinlu in \u003Ca href=\"https://github.com/nanomq/NanoNNG/pull/1575\">https://github.com/nanomq/NanoNNG/pull/1575\u003C/a>\u003C/li>\n\u003C/ul>\n\u003C/li>\n\u003Cli>NNG Bridge: Sync with \u003Ccode>sdv_master\u003C/code> branch by @alvin1221 in \u003Ca href=\"https://github.com/nanomq/NanoNNG/pull/1576\">https://github.com/nanomq/NanoNNG/pull/1576\u003C/a>\u003C/li>\n\u003Cli>FIX [mqtt_ws] stop qsaio ack-send cb from double-finishing user tx aio by @jayenashar in \u003Ca href=\"https://github.com/nanomq/NanoNNG/pull/1577\">https://github.com/nanomq/NanoNNG/pull/1577\u003C/a>\u003C/li>\n\u003Cli>FIX [mqtt_ws] complete recv/send aio on cancel so pipe reaping can't wedge by @jayenashar in \u003Ca href=\"https://github.com/nanomq/NanoNNG/pull/1578\">https://github.com/nanomq/NanoNNG/pull/1578\u003C/a>\u003C/li>\n\u003Cli>move QoS ACK logic from transport to protocol layer by @JaylinYu in \u003Ca href=\"https://github.com/nanomq/NanoNNG/pull/1580\">https://github.com/nanomq/NanoNNG/pull/1580\u003C/a>\u003C/li>\n\u003Cli>update msquic ver for better compatibility by @JaylinYu in \u003Ca href=\"https://github.com/nanomq/NanoNNG/pull/1583\">https://github.com/nanomq/NanoNNG/pull/1583\u003C/a>\u003C/li>\n\u003Cli>Add no local config reader &amp; improve cmakelist for new ver of msquic by @JaylinYu in \u003Ca href=\"https://github.com/nanomq/NanoNNG/pull/1586\">https://github.com/nanomq/NanoNNG/pull/1586\u003C/a>\u003C/li>\n\u003Cli>support nolocal flag overwritten by @JaylinYu in \u003Ca href=\"https://github.com/nanomq/NanoNNG/pull/1588\">https://github.com/nanomq/NanoNNG/pull/1588\u003C/a>\u003C/li>\n\u003Cli>new resend policy batch_resend by @JaylinYu in \u003Ca href=\"https://github.com/nanomq/NanoNNG/pull/1589\">https://github.com/nanomq/NanoNNG/pull/1589\u003C/a>\u003C/li>\n\u003C/ul>\n\u003Ch2>New Contributors\u003C/h2>\n\u003Cul>\n\u003Cli>@ingwinlu made their first contribution in \u003Ca href=\"https://github.com/nanomq/NanoNNG/pull/1564\">https://github.com/nanomq/NanoNNG/pull/1564\u003C/a>\u003C/li>\n\u003Cli>@jayenashar made their first contribution in \u003Ca href=\"https://github.com/nanomq/NanoNNG/pull/1577\">https://github.com/nanomq/NanoNNG/pull/1577\u003C/a>\u003C/li>\n\u003C/ul>\n\u003Cp>\u003Cstrong>Full Changelog\u003C/strong>: \u003Ca href=\"https://github.com/nanomq/NanoNNG/compare/0.25.3...0.25.5\">https://github.com/nanomq/NanoNNG/compare/0.25.3...0.25.5\u003C/a>\u003C/p>\n","2026-07-29",1787538582241]