Подтвердить что ты не робот

Можно ли построить безмозглого клиента Node от Meteor?

Я работаю над системой, в которой удаленная машина (подключенная к проектору и другому оборудованию) управляется с помощью приложения Meteor. В настоящее время мы используем домашний DDP-клиент, написанный на С++, для этого, но этот подход не так гибкий, как хотелось бы:

  • Существует дублирование между С++ и JavaScript.
  • Модификации сложны, потому что мы не можем одновременно развертывать сервер и клиент, поэтому нам всегда нужно думать о обратной совместимости и упорядочивании.

Итак, я играю с идеей переписать часть Meteor приложения С++ в JavaScript. В идеале я хотел бы иметь специальный клиент нашего приложения (назовите его headless, сродни server и client), который:

  • построен из того же источника, что и остальное приложение Meteor, поэтому мы можем повторно использовать ту же бизнес-логику, что и на сервере и веб-клиенте,
  • выполняется в Node.js на клиентской машине, чтобы он мог получить доступ к ОС, и
  • не содержит кода браузера, но добавляет другой код, специфичный для управления машиной и связи с приложением С++.

Даже лучше было бы, если бы этот клиент не содержал никакого реального кода, а просто кусок кода начальной загрузки. Загрузочный загрузчик загрузит фактический код приложения с сервера и повторно загрузит его при обновлении сервера так же, как и для клиента HTML. Это упростит обновление, потому что мы можем предположить, что сервер и клиент всегда работают с той же версией.

Есть ли такая вещь? Если нет, то как близко я могу получить без необоснованных усилий? Поиски "метеоритного безголового клиента" и "meteor node client" мне не помогают, а только несколько связанный вопрос, который я мог найти, не получил хорошего ответа.

4b9b3361

Ответ 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.