понедельник, 21 ноября 2022 г.

[prog] Что-то странное: появилось желание сделать реализацию MQTT v5 :)

В текущем проекте начала маячить перспектива затаскивания в разработку MQTT. Дабы освежить в памяти что это такое прочел по диагонали спецификацию по пятой версии MQTT. И в процессе чтения поймал себя на необычном для последних лет впечатлении...

Дело в том, что я в программизме уже больше тридцати лет и повидать и напрограммировать довелось всякого. Не то, чтобы сильно уж много, но тем не менее. В связи с чем как-то блеск в глазах потускнел и само это занятие уже несколько подутомило.

Так что если мне задать вопрос "а над какой задачей было бы интересно поработать?", то я зависну на некоторое время и вряд ли смогу дать вменяемый ответ. А невменяемый мог бы звучать как "ни над какой" ;)

Но вот просматривая спецификацию MQTT подумал, что как раз сделать свою реализацию MQTT v5 было бы интересно. Причем как клиентскую, так и серверную.

Даже удивительно, но когда начинаешь в голове прикидывать какие-то детали парсинга MQTT-шных пакетов или обслуживания клиентских подключений в брокере, то даже какой-то слабый всплеск адреналина ощущается. Несколько подзабытое чувство.

Еще подумалось вот что: в конце 2016-го и начале 2017-ого мы в "СтифСтрим" решали какой еще открытый продукт родить, чтобы иметь в своем портфолио что-то кроме SObjectizer-а. И основных идей было две: либо какой-то MQ-шный брокер, либо встраиваемый в C++ приложения HTTP-сервер.

И мне сейчас кажется, что если бы спецификация MQTT v5 была доступна уже тогда, то, возможно, RESTinio бы и не случилось бы. Мог бы быть какой-то MQ-шный брокер на C++ на базе SObjectizer-а. Но тогда MQTT v5 еще не было, а делать свой брокер намного более простого MQTT v3 на фоне уже существовавших тогда альтернатив не выглядело перспективной затеей.

PS. Какой смысл у этой заметки? Да никакого, просто решил поделиться давно забытым ощущением когда возникает желание что-то запрограммировать. Ибо в последние годы программировать приходится без особого желания. Так-то понятно, что еще одна реализация MQTT вряд ли кому-то нужда. Хотя я и уверен в том, что в существующих реализациях есть, как минимум, один фатальный недостаток... :)))

4 комментария:

Stanislav Mischenko комментирует...

Тоже поделюсь, хотя никто меня не просил ;) Желания что-то запрограммировать нет. Мне не хватает духа гаражного стартапа, когда ты увлечённо что-то кодишь в группе с такими же увлечёнными общей идеей людьми.

eao197 комментирует...

А вот я всегда был велосипедостроителем и запрограммировать что-нибудь с нуля -- это чуть ли не в крови. Однако, в последние годы что-то такое желание крайне редко возникало.

Alex комментирует...

А что, прикольно. Как тестировать предполагаете?

eao197 комментирует...

@Alex

Я пока не предполагаю :)
Это пример задачи, которой интересно было бы заняться. На случай, если вдруг спросят (минувшим летом пару раз спрашивали, я терялся с ответом).

А так есть еще большие куски работы по SObjectizer и RESTinio, на которые пока нет ресурсов. Своя реализация MQTT в таких условиях -- это авантюра. Но если рутина задолбет окончательно, то я даже и не знаю... ;)

Тестировать, в принципе, более-менее понятно.

Там же есть большой кусок работы с парсингом/сериализацией PDU-шек. Такие вещи простыми юнит-тестами закрываются. По типу вот такого.

И есть еще больший кусок работы, связанный с приемом и обслуживанием подключений. Такие вещи так же тестами покрываются (не знаю, как это все правильно называется, мы продолжаем их называть юнит-тестами). Простенький пример.