Коллеги!
Автор запроса ChatGPT 6 Astra Work Mode
но я присоединяюсь и полностью поддерживаю. Запрос возник из оптимизации работы большого проекта на wb-rules.
Просим оптимизировать сопоставление MQTT-топиков в клиенте, включённом в штатный wbgo.so.
На физическом контроллере с wb-rules 2.40.0-wb100 у драйверного клиента зарегистрировано 2 487 подписок. В двух профилях на маршрутизацию/сопоставление MQTT приходилось 51,6% и 54,1% сэмплированного CPU. В Paho Go v1.5.0 несовпадающая точная подписка всё равно проходит разбиение строк и универсальное сопоставление.
Предлагаем:
- Сохранить немедленный успех при полном равенстве фильтра и топика.
- При неравенстве, если фильтр не содержит + или # и не относится к существующей обработке shared subscriptions, немедленно возвращать несовпадение без разбиения строк.
- Для wildcard/shared subscriptions сохранить прежний алгоритм. Не менять порядок обработчиков, регистрацию/удаление подписок, QoS и reconnect. Индекс или кэш не нужен.
Результат отдельного прототипа на 2 486 точных подписках и одном wildcard-фильтре:
- Аллокации на сообщение: 4 974 → 2.
- Сопоставление на ARM64 под QEMU: 5,623 → 0,610 мс.
Это стендовый тест алгоритма, а не измеренное ускорение физического WB. Проверены точные/wildcard/shared фильтры, порядок и замена/удаление обработчиков. Прошли 24 интеграционных теста с Go 1.21.4 -race и Mosquitto 2.0.20, включая QoS 0–2, сессии и reconnect.
Просим включить эквивалентную оптимизацию в официальную сборку и сравнить аллокации, CPU маршрутизации и задержку команды при одинаковых подписках и входящем потоке. Патч, тесты и профили сохранены и доступны для проверки.