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


Posted in Javascript onJuly 03, 2015

如何用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++的写的程序了。

Javascript 相关文章推荐
javascript工具库代码
Mar 29 Javascript
两种不同的方法实现js对checkbox进行全选和反选
May 13 Javascript
javascript学习笔记(六)数据类型和JSON格式
Oct 08 Javascript
JavaScript实现下拉菜单的显示和隐藏
Jan 05 Javascript
Javascript中this绑定的3种方法与比较
Oct 13 Javascript
BootStrap 表单控件之单选按钮水平排列
May 23 Javascript
JavaScript使用FileReader实现图片上传预览效果
Mar 27 Javascript
(模仿京东用户注册)用JQuery实现简单表单验证,初学者必看
Jan 08 jQuery
vue 实现的树形菜的实例代码
Mar 19 Javascript
vue中各选项及钩子函数执行顺序详解
Aug 25 Javascript
vue使用nprogress实现进度条
Dec 09 Javascript
node.js 微信开发之定时获取access_token
Feb 07 Javascript
使用jspdf生成pdf报表
Jul 03 #Javascript
JSON相关知识汇总
Jul 03 #Javascript
javascript表格的渲染组件
Jul 03 #Javascript
解决jquery实现的radio重新选中的问题
Jul 03 #Javascript
移动端JQ插件hammer使用详解
Jul 03 #Javascript
jQuery+AJAX实现无刷新下拉加载更多
Jul 03 #Javascript
Javascript实现字数统计
Jul 03 #Javascript
You might like
PHP表单验证的3个函数ISSET()、empty()、is_numeric()的使用方法
2011/08/22 PHP
PHP实现通过正则表达式替换回调的内容标签
2015/06/15 PHP
在PHP语言中使用JSON和将json还原成数组的方法
2016/07/19 PHP
解放web程序员的输入验证
2006/10/06 Javascript
js中函数调用的两种常用方法使用介绍
2014/07/17 Javascript
javascript在IE下trim函数无法使用的解决方法
2014/09/12 Javascript
基于javascript实现根据身份证号码识别性别和年龄
2016/01/22 Javascript
创建一个类Person的简单实例
2016/05/17 Javascript
Bootstrap CSS使用方法
2016/12/23 Javascript
jQuery加密密码到cookie的实现代码
2017/04/18 jQuery
Vue + better-scroll 实现移动端字母索引导航功能
2018/05/07 Javascript
Node.js 使用AngularJS的方法示例
2018/05/11 Javascript
Node.js创建一个Express服务的方法详解
2020/01/06 Javascript
python遍历数组的方法小结
2015/04/30 Python
Python实现绘制双柱状图并显示数值功能示例
2018/06/23 Python
python脚本监控Tomcat服务器的方法
2018/07/06 Python
浅谈python连续赋值可能引发的错误
2018/11/10 Python
Python实现自定义读写分离代码实例
2019/11/16 Python
python GUI库图形界面开发之PyQt5菜单栏控件QMenuBar的详细使用方法与实例
2020/02/28 Python
Python 高效编程技巧分享
2020/09/10 Python
比利时家具购买网站:Home24
2019/01/03 全球购物
DNA基因检测和分析:23andMe
2019/05/01 全球购物
新闻网站实习自我鉴定
2013/09/25 职场文书
统计学专业毕业生的自我评价分享
2013/11/28 职场文书
服装厂厂长职责
2013/12/16 职场文书
写给爸爸的道歉信
2014/01/15 职场文书
大学生学年自我鉴定
2014/02/10 职场文书
个人廉洁自律承诺书
2014/03/27 职场文书
新闻编辑求职信
2014/04/09 职场文书
研究生求职自荐书
2014/06/23 职场文书
公务员年度考核个人总结
2015/02/12 职场文书
试用期解除劳动合同通知书
2015/04/16 职场文书
《实心球》教学反思
2016/02/23 职场文书
详解如何修改nginx的默认端口
2021/03/31 Servers
缓存替换策略及应用(以Redis、InnoDB为例)
2021/07/25 Redis
剑指Offer之Java算法习题精讲二叉树专项训练
2022/03/21 Java/Android