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性能优化 创建文档碎片(document.createDocumentFragment)
Jul 13 Javascript
FF火狐下获取一个元素同类型的相邻元素实现代码
Dec 15 Javascript
js弹出窗口之弹出层的小例子
Jun 17 Javascript
jQuery 1.9.1源码分析系列(十五)之动画处理
Dec 03 Javascript
基于AngularJs + Bootstrap + AngularStrap相结合实现省市区联动代码
May 30 Javascript
基于jQuery实现页面搜索功能
Mar 26 Javascript
详解vue-cli开发环境跨域问题解决方案
Jun 06 Javascript
简单谈谈CommonsChunkPlugin抽取公共模块
Dec 31 Javascript
JS数组扁平化(flat)方法总结详解
Jun 24 Javascript
vue.js实现回到顶部动画效果
Jul 31 Javascript
Chrome插件开发系列一:弹窗终结者开发实战
Oct 02 Javascript
类和原型的设计模式之复制与委托差异
Jul 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数组函数序列之array_sum() - 计算数组元素值之和
2011/10/29 PHP
phpStudy2016 配置多个域名期间遇到的问题小结
2017/10/19 PHP
jQuery 一个图片切换的插件
2011/10/09 Javascript
jQuery图片滚动图片的效果(另类实现)
2013/06/02 Javascript
Jquery同辈元素选中/未选中效果的实例代码
2013/08/01 Javascript
jquery easyui 对于开始时间小于结束时间的判断示例
2014/03/22 Javascript
jQuery中animate用法实例分析
2015/03/09 Javascript
jQuery抛物线运动实现方法(附完整demo源码下载)
2016/01/08 Javascript
JavaScript中的继承之类继承
2016/05/01 Javascript
获取IE浏览器Cookie信息的方法
2017/01/23 Javascript
ES6正则表达式的一些新功能总结
2017/05/09 Javascript
jQuery+PHP+Mysql实现抽奖程序
2020/04/12 jQuery
微信小程序获取用户信息及手机号(后端TP5.0)
2019/09/12 Javascript
如何在Vue中抽离接口配置文件
2019/10/31 Javascript
浅谈Vue SSR中的Bundle的具有使用
2019/11/21 Javascript
基于canvasJS在PHP中制作动态图表
2020/05/30 Javascript
完美解决vue 中多个echarts图表自适应的问题
2020/07/19 Javascript
浅谈JavaScript窗体Window.ShowModalDialog使用
2020/07/22 Javascript
[01:18:43]2014 DOTA2华西杯精英邀请赛5 24 iG VS DK
2014/05/25 DOTA
使用Python脚本来控制Windows Azure的简单教程
2015/04/16 Python
Python中使用插入排序算法的简单分析与代码示例
2016/05/04 Python
Python 支持向量机分类器的实现
2020/01/15 Python
python剪切视频与合并视频的实现
2020/03/03 Python
CSS3 优势以及网页设计师如何使用CSS3技术
2009/07/29 HTML / CSS
HTML中fieldset标签概述及使用方法
2013/02/01 HTML / CSS
Origins加拿大官网:雅诗兰黛集团高端植物护肤品牌
2017/11/19 全球购物
STP的判定过程
2012/10/01 面试题
优纳科技软件测试面试题
2012/05/15 面试题
会计求职信
2014/05/29 职场文书
会计学专业自荐信
2014/06/25 职场文书
2015大学生实训报告
2014/11/05 职场文书
求职自我推荐信
2015/03/24 职场文书
研讨会通知
2015/04/27 职场文书
升学宴来宾致辞
2015/07/27 职场文书
阿里云Nginx配置https实现域名访问项目(图文教程)
2021/03/31 Servers
Oracle11g r2 卸载干净重装的详细教程(亲测有效已重装过)
2021/06/04 Oracle