繁体   English   中英

使用 C++ 插件为 nodejs 应用程序构建独立的可执行文件

[英]Building a standalone executable for nodejs application with C++ addons

我目前正在为nodejs构建C++插件,以便我可以通过websockets公开一些C++ API。 这个 API 让客户端可以与连接到 PC(甚至是 Pi)的复合设备通信。 由于它将部署在 PC 上,因此我想将其捆绑为独立应用程序。 我已经为 POC 使用了 node webkit (nw + nw-gyp)。 这工作得很好,但是向前推进我想将 UI 层分解为单独的可部署层,并将 websockets API 暴露为单独的可部署层。

但是目前,当您使用 node-webkit 构建应用程序时,它还包括浏览器,这使得“大”可部署。 我真的不需要包含浏览器。 无论如何要说节点 webkit 不包括浏览器? 我已经将 jxcore 视为一种可能的替代方案,但它仍然是一个非常年轻的项目,我不确定它是否也可以支持 C++ 插件。 有没有更好的方法来构建具有本机插件作为依赖项的独立节点应用程序(没有 UI)?

一个更简单的解决方案是在浏览器中使用 web 组件,在网络上使用 JRPC(但抽象对象)。 Nodejs 可以使用 SWIG 连接 C++,从而关闭浏览器和 C++ 之间的循环。

这种方法避免使用繁重的框架和依赖项。

此微应用中提供了一个完整的示例。 它的基础是使用 SWIG 包装您的 C++ 以便 nodejs 可以要求它:

%module "swigCNodejs"
%{
#include "Test.H"
%}

%include <std_string.i>
%include "Test.H"

然后将该包装器编译为在 nodejs 中执行的 nodejs 模块,如下所示:

var libSwigCNodejs = require('../swig/.libs/libSwigCNodejs');
let test = new libSwigCNodejs.Test;

使用 JRPC+JRPC-OO 通过网络将 class 暴露给浏览器:

let JRPCTools = require('@flatmax/jrpc-oo/JRPCTools');

// get a class to expose over the network
let TestClass = require('./TestClass').TestClass;

// note TestClass2 inherits TestClass
tc=new TestClass; // this class will be used over js-JRPC

// start the server and add the class.
var JrpcServer=new JRPCTools.JRPCServer(9000); // start a server on port 9000
JrpcServer.addClass(tc); // setup the class for remote use over the network

然后在浏览器中实现你的 webcomponent 来继承 JRPCClient class ,如下所示:

class Test extends JRPCClient {...};

您现在可以通过网络从浏览器执行 C++。

如果您构建了 Node.js 扩展/插件,并且您不需要浏览器来进行包装,那么您为什么要使用 NW.js? 如果您只是想将 Node.js 脚本转换为 EXE,请使用pkg ( https://www.npmjs.com/package/pkg )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM