是否有可能从Meteor构建一个基于节点的无头客户端?

时间:2016-11-24 08:30:27

标签: node.js meteor

我正在通过Meteor应用程序控制远程机器(连接到投影仪和其他硬件)的系统。目前,我们正在使用用C ++编写的本土DDP客户端来实现这一目标,但这种方法并不像我想的那样灵活:

  • C ++和JavaScript之间存在重复。
  • 升级很难,因为我们无法同时部署服务器和客户端,所以我们总是要考虑向后兼容性和订购。

所以我想到了用JavaScript重写C ++应用程序的Meteor部分的想法。理想情况下,我希望有一个特殊的客户端(称为headless,类似于serverclient):

  • 与Meteor应用程序的其余部分构建在同一个源中,因此我们可以重用与服务器和Web客户端相同的业务逻辑,
  • 在客户端计算机上的Node.js中运行,以便它可以访问操作系统和
  • 不包含任何浏览器代码,但添加了一些特定于控制机器和与C ++应用程序通信的其他代码。

如果这个客户端不包含任何实际代码,只是一段引导代码,那就更好了。引导程序将从服务器下载实际的应用程序代码,并在更新服务器时重新下载它,其方式与HTML客户端相同。这会使更新变得更容易,因为我们可以假设服务器和客户端始终运行相同的版本。

这样的事情存在吗?如果没有,如果没有不合理的努力,我能有多接近?搜索"流星无头客户"和"流星节点客户端"没有帮助我,我找到的only somewhat related question没有得到很好的回答。

3 个答案:

答案 0 :(得分:4)

您应该可以使用meteor-desktop程序包来构建远程无头客户端。

https://www.npmjs.com/package/meteor-desktop#architecture

  

在Electron应用中,您的应用中会运行两个进程。   所谓的主要流程和渲染器流程。主要过程就是   在节点中执行的JS代码,渲染器是Chromium进程。在   此集成您的Meteor应用程序正在渲染器进程中运行   并且您的桌面特定代码在主进程中运行。他们是   通过IPC活动进行沟通。基本上,桌面方面   将其API发布为IPC事件监听器。在你的Meteor代码中,   称它为Desktop.send(' module',' event');。

这会给你:

  • os访问此(桌面)客户端
  • hot code push(在节点模块周围有警告)
  • 提供Meteor.isDesktop来控制在浏览器和桌面客户端上运行的代码

答案 1 :(得分:1)

如果您希望将Meteor客户端用作无头客户端,并且由于客户端在浏览器中运行,我建议您使用无头浏览器,例如 PhantomJS ,它可以运行没有UI的Meteor代码,并且能够访问本地文件系统。

另一个选项,实际上并不是你所描述的,而是将javascript设为一切,是使用节点ddp客户端,并将代码编写到可以在节点端轻松导入的模块中。

答案 2 :(得分:-1)

远程计算机上是否有定制的meteor客户端和自定义硬件?或者是C ++程序充当客户端?然后是服务器,除了你的其他客户端浏览器?

听起来你应该以不同的方式做一些事情:

  • 设置具有自定义域和端口转发的动态DNS系统,以便您可以将特殊硬件远程系统用作服务器。

  • 使用硬件在该远程计算机上运行Meteor服务器。

  • 而不是说完DDP的完整C ++应用程序,只需创建一个Node.js C ++插件,它与硬件通信并在Meteor服务器代码中使用它。