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  Error 对象 错误处理
May 18 Javascript
理解Javascript_01_理解内存分配原理分析
Oct 11 Javascript
jQuery 操作option的实现代码
Mar 03 Javascript
JavaScript的常见兼容问题及相关解决方法(chrome/IE/firefox)
Dec 31 Javascript
JavaScript将数据转换成整数的方法
Jan 04 Javascript
jquery 显示*天*时*分*秒实现时间计时器
May 07 Javascript
jQuery简单实现仿京东商城的左侧菜单效果代码
Sep 09 Javascript
jQuery实现鼠标选文字发新浪微博的方法
Apr 02 Javascript
老生常谈js数据类型
Aug 03 Javascript
jQuery获取随机颜色的实例代码
May 21 jQuery
JavaScript创建对象方法实例小结
Sep 03 Javascript
JS实现点星星消除小游戏
Mar 24 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 解压rar文件及zip文件的方法
2014/05/05 PHP
修改ThinkPHP缓存为Memcache的方法
2014/06/25 PHP
PHP标准类(stdclass)用法示例
2016/09/28 PHP
javascript动画效果类封装代码
2007/08/28 Javascript
JavaScript类和继承 prototype属性
2010/09/03 Javascript
javascript ajax 仿百度分页函数
2013/10/29 Javascript
js数组操作常用方法
2014/05/08 Javascript
简介JavaScript中的setTime()方法的使用
2015/06/11 Javascript
Angularjs中的事件广播 —全面解析$broadcast,$emit,$on
2016/05/17 Javascript
BootStrap table表格插件自适应固定表头(超好用)
2016/08/24 Javascript
vue.js初学入门教程(1)
2016/11/03 Javascript
ajax的分页查询示例(不刷新页面)
2017/01/11 Javascript
node.js通过axios实现网络请求的方法
2018/03/05 Javascript
Vue 父子组件数据传递的四种方式( inheritAttrs + $attrs + $listeners)
2018/05/04 Javascript
Vue项目添加动态浏览器头部title的方法
2018/07/11 Javascript
Angular中sweetalert弹框的基本使用教程
2018/07/22 Javascript
详解SPA中前端路由基本原理与实现方式
2018/09/12 Javascript
JS实现吸顶特效
2020/01/08 Javascript
Python中DJANGO简单测试实例
2015/05/11 Python
python 多线程中子线程和主线程相互通信方法
2018/11/09 Python
python实现顺时针打印矩阵
2019/03/02 Python
python实现按行分割文件
2019/07/22 Python
利用Python检测URL状态
2019/07/31 Python
Python之关于类变量的两种赋值区别详解
2020/03/12 Python
python实现简单学生信息管理系统
2020/04/09 Python
HTML5标签小集
2011/08/02 HTML / CSS
幼儿园消防安全制度
2014/01/26 职场文书
五型班组建设方案
2014/02/10 职场文书
小小的船教学反思
2014/02/21 职场文书
关于环保的建议书
2014/05/12 职场文书
计算机应用专业毕业生求职信
2014/06/03 职场文书
艺术设计专业毕业生推荐信
2014/07/08 职场文书
好的旅游活动方案
2014/08/19 职场文书
Python趣味挑战之用pygame实现简单的金币旋转效果
2021/05/31 Python
详解CSS中的特指度和层叠问题
2021/07/15 HTML / CSS
sql时间段切分实现每隔x分钟出一份高速门架车流量
2022/02/28 SQL Server