Можно ли построить безмозглого клиента Node от Meteor?
Я работаю над системой, в которой удаленная машина (подключенная к проектору и другому оборудованию) управляется с помощью приложения Meteor. В настоящее время мы используем домашний DDP-клиент, написанный на С++, для этого, но этот подход не так гибкий, как хотелось бы:
- Существует дублирование между С++ и JavaScript.
- Модификации сложны, потому что мы не можем одновременно развертывать сервер и клиент, поэтому нам всегда нужно думать о обратной совместимости и упорядочивании.
Итак, я играю с идеей переписать часть Meteor приложения С++ в JavaScript. В идеале я хотел бы иметь специальный клиент нашего приложения (назовите его headless
, сродни server
и client
), который:
- построен из того же источника, что и остальное приложение Meteor, поэтому мы можем повторно использовать ту же бизнес-логику, что и на сервере и веб-клиенте,
- выполняется в Node.js на клиентской машине, чтобы он мог получить доступ к ОС, и
- не содержит кода браузера, но добавляет другой код, специфичный для управления машиной и связи с приложением С++.
Даже лучше было бы, если бы этот клиент не содержал никакого реального кода, а просто кусок кода начальной загрузки. Загрузочный загрузчик загрузит фактический код приложения с сервера и повторно загрузит его при обновлении сервера так же, как и для клиента HTML. Это упростит обновление, потому что мы можем предположить, что сервер и клиент всегда работают с той же версией.
Есть ли такая вещь? Если нет, то как близко я могу получить без необоснованных усилий? Поиски "метеоритного безголового клиента" и "meteor node client" мне не помогают, а только несколько связанный вопрос, который я мог найти, не получил хорошего ответа.
Ответы
Ответ 1
Вы должны иметь возможность заставить это работать, используя meteor-desktop для создания вашего удаленного безголового клиента.
https://www.npmjs.com/package/meteor-desktop#architecture
В приложении "Электрон" в вашем приложении работают два процесса. Так называемый основной процесс и процесс рендеринга. Основной процесс - это просто JS-код, выполненный в node, а рендеринг - это процесс Chromium. В эта интеграция вашего приложения Meteor запускается в процессе рендеринга и ваш рабочий код на рабочем столе запускается в основном процессе. Они есть связь через события IPC. В принципе, настольная сторона публикует свой API как слушателей событий IPC. В вашем коде Метеор, вызывающий его так же просто, как Desktop.send('module', 'event');
Это даст вам:
- os доступ к этому (настольному) клиенту
- горячий ввод кода (с оговорками вокруг модулей node)
- предоставляет Meteor.isDesktop для управления тем, какой код выполняется в браузере, и клиент рабочего стола
Ответ 2
Если вы хотите использовать Meteor-клиент в качестве безголового клиента, и, поскольку клиент работает в браузере, я бы предложил ваш взгляд на использование безгласного браузера, например PhantomJS, который может запускать ваш Meteor кода без пользовательского интерфейса и имеет возможность доступа к локальной файловой системе.
Другой вариант, который не является тем, что вы описываете, но сделает все javascript, заключается в использовании клиента node ddp
и напишите свой код в модулях, которые вы можете легко импортировать со стороны node.
Ответ 3
Есть ли обычный метеоритный клиент на удаленном компьютере с настраиваемым оборудованием? Или это программа на С++, действующая как клиент? А затем сервер, в дополнение к вашему другому браузеру клиента?
Похоже, вы должны сделать несколько вещей по-другому:
-
Настройте динамическую систему DNS с настраиваемым доменом и переадресацией портов, чтобы вы могли использовать специальную удаленную систему в качестве сервера.
-
Запустите сервер Meteor на этой удаленной машине с аппаратным обеспечением.
-
Вместо полного приложения на С++, говорящего с DDP, просто создайте аддон Node.js С++, который говорит об аппаратном обеспечении и использует его в коде сервера Meteor.