Node-red
Народ, меня прет, как хомячка от сгоревшего амбара травы. То самое состояние, когда работа в кайф и уходить не хочется. Но. По порядку, степ бай степ.
У моего текущего клиента задача:
железка <-----TCP socket----> приложение которое я пишу <----- хренова туча MQ топиков <-----> MQ broker < -----> нечто
С железки сыплются сообщения, которые надо интерпретировать в приложении и отсылать обратно на железку ответные сообщения. С MQ брокера сыплются сообщения, которые надо интерпретировать, слать на железку в ее формате, слать ответы для "нечто" на MQ брокер, делать некие действия и пр.
В принципе, задача не особо сложная (есть тонкости: часть сообщений надо посылать, когда приходят другие сообщения, часть сообщений надо посылать по таймерам и т.д.) но самое паскудное в такого рода задачах - это отладка последовательности сообщений: железка некоторые сообщения шлет только в очень специальных случаях, некоторые шлет вообще раз в високосный год и т.д.
Очевидным решением является написание симулятора железки. Но писать его на нормальном, человеческом языке программирования затрахаешься: надо написать парсер входных сообщений, надо написать выходные сообщения, надо реализовать что-то вроде state-машины. Кто делал - тот знает: работа по написанию такого симулятора как бы не сложнее и дольше написания апликухи.
Кроме того, надо бы написать и симулятор "нечто", т.к. самого "нечто" еще в природе нет, его только собирается писать другая команда (согласованы Sequence diagrams и формат сообщений, но не более того).
На помошь приходит node-red. Эта хрень способна имитировать все ходовые форматы сообщений (JSON, HTML, JAML, CSV и черта в ступе). Способна имитировать поведение TCP сокета на прием и передачу данных. Парсить полученные сообщения. Сливать их вместе. Слать хочешь по TCP, хочешь по UDP. Умеет имитировать http response из коробки. Умеет прикидываться MQ-клиентом и принимать-передавать чего пошлешь. Умеет слать е-мэйлы. Умеет прикидываться Raspberry GPIO, слать аудиопотоки. Может прикинуться Твиттером, если надо. Имеет кучу допольнительных модулей, причем интенсивно разрабатываемых: я не нашел пока чего-то полезного, чем это НЕ умеет прикидываться.
Самый цимес в том, что программировать ничего не надо. Надо соединить между собой триггер, который запускает событие (например, отправку сообщения), сообщение и сокет. Линиями соединить. После этого нажимаешь кнопку, и у тебя улетает по указанному адресу и порту заданное тобой сообщение/файл/неведомая хрень, ловится ответ и все это выводится в консоль. Надо - сделай цепочку сообщений. Надо - неограниченное количество разных цепочек на все случаи жизни.
Для нормальной работы требует установленной NodeJS, npm и собственно node-red.
Я сегодня написал работающий симулятор железки, о которой шла речь выше, за 25 минут, из которых 20 разбирался, что с кем соединять. Среда разработки и исполнения - сам браузер.
Горячо рекомендую любому разработчику, который отлаживает такие вещи, как обработка входящих сообщений, отправка сообщений и пр. Экономит даже не часы - недели: я бы такой симулятор классическим способом писал бы неделю, не разгибаясь.
- cynic's blog
- Login to post comments
А потом этот
А потом этот твой симулятор будет высочайше назначен эталонной имплементацией и так и уйдёт в продакшн небритым и не подмытым :)
В продакшене
В продакшене уже железка. Симулятор симулирует железку.
Не понял - зачем
Не понял - зачем тогда симулятор?
Я написал же.
Я написал же. Симулятор выдает то, что надо и когда надо. А железка некоторые сообщения выдает раз в високосный год.
Железка не
Железка не имеет тестового режима?!
Вот ты напишешь симулятор, и что-то упустишь, не дай Бог. А потом тебя будут немножко вешать за использование некомплиантной имплементации протокола. Я бы на твоём месте семь раз с менеджером это дело обсосал.
Железка не
Железка не имеет тестового режима.
Уже оговорено, симулятор "нечто" написал он сам, я написал симулятор железки.
А-а. Ну тогда
А-а. Ну тогда Ок.
Просто в моей практике очень часто бывали случаи, когда железку делала третья сторона, при приёмке толком не протестировали, а потом вдогонку спецификацию по тихому поменяли. После интеграции, разумеется, ничего не работает и руководство с деланно круглыми глазами начинает заливать, что дескать, пока ты на проект не пришёл, у нас всё работало.
У нас все это
У нас все это фиксируется на бумаге. Протокол. Имплементация. У меня для каждого случая нарисованы диаграммы обмена сообщениями и начальство уведомлено в письменной форме по этому поводу. Более того:я храню всю переписку даже с уже давно закончившихся проектов, ибо я параноик.