分类分类
更新时间:2026-05-10 23:01:44作者:zhao
如何用C++和node交互,在node的程序中,如果有大数据量的计算,处理起来比较慢,可以用C++来处理,然后通过回调(callback的形式),返回给node。先回顾一下正统的用 C++ 开发 native 模块的方法
#include <node.h>
#include <v8.h>
using namespace v8;
// 这里是 hello 函数的 C++ 实现部分
Handle<Value> Method(const Arguments& args) {
HandleScope scope;
return scope.Close(String::New("world"));
}
// 这里是模块的初始化函数,必须有
void init(Handle<Object> exports) {
exports->Set(String::NewSymbol("hello"),
FunctionTemplate::New(Method)->GetFunction());
}
// 这里定义本模块的名字和初始化函数
NODE_MODULE(hello, init)
这个模块用Node 写的话,是这样的:
exports.hello = function() {
return 'world';
};
为了编译 C++ 这个模块,还需要一个 JSON 格式的 binding.gyp 文件,来定义编译的细节。
{
"targets": [
{
"target_name": "hello",
"sources": [ "hello.cpp" ]
}
]
}
执行 node-gyp configure build 就直接编译了。
node test.js:
var addon = require('./build/Release/hello');
console.log(addon.hello());
就输出结果。
如此node就可以直接调用C++编写的程序。
对上面程序的解释:在hello.cc 中,我们首先创建了一个函数Method, 此函数返回一个"hello,world"的字符串,后面我们又创建了一个init的函数,作为一个初始化函数,我们去调用了一个函数
最后面,我们将这个模块绑定为:NODE_MODULE(hello, init)
在官网中指出,所有的node的插件必须输出一个初始化的函数,也就是说如下代码是在每个模块都必须有的,固定格式。
void Initialize (Handle<Object> exports);
NODE_MODULE(module_name, Initialize)
其中 module_name 必须对应上binding.gyp中的 target_name 就可以了。
经过了node-gyp configure build 编译以后会在当前文件下生成一个build 的新的文件夹。我们通过在test.js中去引用这个build的结果,就可以调用C++的写的程序了。
相关
修真情缘角色扮演303.33 MBv1.0.02026-05-10
下载我的小独角兽女孩休闲益智380.89 MBv1.0.232026-05-10
下载超级种田男孩手机版经营养成1.31Gv1.0.92026-05-10
下载不必要的实验冒险游戏64.9 MBv1.1.592026-05-10
下载军师联盟策略游戏163.2 MBv0.0.12026-05-10
下载翻天喜地凑大钱手机版休闲益智138.72 MBv1.0.92026-05-10
下载东离剑游纪手游动作射击1.6Gv1.4.22026-05-10
下载天猫养车商家版App学习办公74.95 MBv0.6.12026-05-10
下载掌上命运方舟App手游辅助137.48 MBv1.9.12026-05-10
下载退役军人服务APP生活服务67.16 MBv1.2.52026-05-10
下载屯漫漫画APP资讯阅读23.06 MBv2.0.32026-05-10
下载蛋仔派对蛋壳App手游辅助185.73 MBv0.0.22026-05-10
下载









