Есть необходимость реализовать двухсторонний обмен данными между разными частями системы.
На данный момент в системе присутствуют:
модуль взаимодействия с внешними пользователями через rest api, реализован на nodejs;
модуль в котором реализована бизнес логика и взаимодействие с БД, реализован на qt;
Планируется:
веб морда для удобства взаимодействия с системой физических пользователей, будет написана на reactjs.
Сейчас между nodejs и qt данные гоняют по веб сокетам. По ним же планируем обмен данными и с веб мордой. Еще есть необходимость плагины из которых состоит qt модуль разнести по разным процессам.
Если обмен данными по веб сокетам с фронтендом смущений не вызывает то их использование для организации обмена между qt процессами, а также между ними и nodejs смущает. Есть ли более подходящие технологии для этого с учетом того что qt плагины и nodejs приложения находятся на одном сервере.
Ответ
Есть масса методов взаимодействия между процессами. К примеру, его можно организовать с помощью простого TCP сокета. Для этого есть поддержка в node.js из коробоки. В Qt для этого используется QTcpSocket. Это самый простой вариант, потому что и там и там есть поддержка из коробки и на выходе мы имеем асинхронный IPC.
Другим вариантом может быть использование разделяемой памяти. Судя по всему, есть горстка дополнений для node.js добавляющих поддержку оной. В Qt есть готовый класс QSharedMemory. Этот метод хуже, т.к. требует дополнительных плагинов и он синхронен(нужно «опрашивать» разделяемую память).
Идём дальше: D-Bus. В node.js есть дополнение для этого, в Qt тоже есть: Qt D-Bus
Безусловно, можно ещё придумать способов. Что из вышеприведённых лучше? Я считаю, что самым простым и удобным будет использование обычного TCP сокета.
Комментариев нет:
Отправить комментарий