首页 > 语言 > JavaScript > 正文

node.js调用C++开发的模块实例

2024-05-06 16:22:36
字体:
来源:转载
供稿:网友

这篇文章主要介绍了node.js调用C++开发的模块实例,在node的程序中,如果有大数据量的计算,处理起来比较慢,可以用C++来处理,然后通过回调(callback的形式),返回给node,需要的朋友可以参考下

如何用C++和node交互,在node的程序中,如果有大数据量的计算,处理起来比较慢,可以用C++来处理,然后通过回调(callback的形式),返回给node。先回顾一下正统的用 C++ 开发 native 模块的方法

 

 
  1. #include <node.h>  
  2. #include <v8.h>  
  3. using namespace v8;  
  4.  
  5. // 这里是 hello 函数的 C++ 实现部分  
  6. Handle<Value> Method(const Arguments& args) {  
  7. HandleScope scope;  
  8. return scope.Close(String::New("world"));  
  9. }  
  10.  
  11. // 这里是模块的初始化函数,必须有  
  12. void init(Handle<Object> exports) {  
  13. exports->Set(String::NewSymbol("hello"),  
  14. FunctionTemplate::New(Method)->GetFunction());  
  15. }  
  16.  
  17. // 这里定义本模块的名字和初始化函数  
  18. NODE_MODULE(hello, init) 

这个模块用Node 写的话,是这样的:

 

 
  1. exports.hello = function() {  
  2. return 'world';  
  3. }; 
  4.  
  5.  
  6. 为了编译 C++ 这个模块,还需要一个 JSON 格式的 binding.gyp 文件,来定义编译的细节。  
  7. {  
  8. "targets": [  
  9. {  
  10. "target_name""hello",  
  11. "sources": [ "hello.cpp" ]  
  12. }  
  13. ]  

执行 node-gyp configure build 就直接编译了。

 

 
  1. node test.js:  
  2. var addon = require('./build/Release/hello');  
  3.  
  4. console.log(addon.hello());  

就输出结果。

如此node就可以直接调用C++编写的程序。

对上面程序的解释:在hello.cc 中,我们首先创建了一个函数Method, 此函数返回一个"hello,world"的字符串,后面我们又创建了一个init的函数,作为一个初始化函数,我们去调用了一个函数

最后面,我们将这个模块绑定为:NODE_MODULE(hello, init)

在官网中指出,所有的node的插件必须输出一个初始化的函数,也就是说如下代码是在每个模块都必须有的,固定格式。

 

 
  1. void Initialize (Handle<Object> exports);  
  2. NODE_MODULE(module_name, Initialize) 

其中 module_name 必须对应上binding.gyp中的 target_name 就可以了。

经过了node-gyp configure build 编译以后会在当前文件下生成一个build 的新的文件夹。我们通过在test.js中去引用这个build的结果,就可以调用C++的写的程序了。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选