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 相关文章推荐
JQuery 1.3.2以上版本中出现pareseerror错误的解决方法
Jan 11 Javascript
JavaScript对内存分配及管理机制详细解析
Nov 11 Javascript
jquery操作HTML5 的data-*的用法实例分享
Aug 17 Javascript
JavaScript之Object类型介绍
Apr 01 Javascript
Juery解决tablesorter中文排序和字符范围的方法
May 06 Javascript
WordPress中利用AJAX异步获取评论用户头像的方法
Jan 08 Javascript
JS检测数组类型的方法小结
Mar 14 Javascript
JavaScript中的遍历详解(多种遍历)
Apr 07 Javascript
node.js 发布订阅模式的实例
Sep 10 Javascript
移动端效果之IndexList详解
Oct 20 Javascript
vue3.0搭配.net core实现文件上传组件
Oct 29 Javascript
vue+flask实现视频合成功能(拖拽上传)
Mar 04 Vue.js
使用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
帅气的琦玉老师
2020/03/02 日漫
用PHP的ob_start();控制您的浏览器cache!
2006/11/25 PHP
超级好用的一个php上传图片类(随机名,缩略图,加水印)
2010/06/30 PHP
PHP+Mysql+Ajax+JS实现省市区三级联动
2014/05/23 PHP
php事务处理实例详解
2014/07/11 PHP
PHP中的reflection反射机制测试例子
2014/08/05 PHP
php广告加载类用法实例
2014/09/23 PHP
PHP中调用SVN命令更新网站方法
2015/01/07 PHP
PHP上传文件时自动分配路径的方法
2015/01/09 PHP
php 广告点击统计代码(php+mysql)
2018/02/21 PHP
jQuery 美元符冲突的解决方法
2010/03/28 Javascript
javascript面向对象之Javascript 继承
2010/05/04 Javascript
多个jQuery版本共存的处理方案
2015/03/17 Javascript
jquery实现浮动的侧栏实例
2015/06/25 Javascript
详解JavaScript基本类型和引用类型
2015/12/09 Javascript
Vue单文件组件的如何使用方式介绍
2017/07/28 Javascript
JS实现的简单下拉框联动功能示例
2018/05/11 Javascript
angularJs中$scope数据序列化的实例
2018/09/30 Javascript
Python Mysql自动备份脚本
2008/07/14 Python
Python3基础之输入和输出实例分析
2014/08/18 Python
Python正则表达式匹配ip地址实例
2014/10/09 Python
python清除字符串中间空格的实例讲解
2018/05/11 Python
python 与服务器的共享文件夹交互方法
2018/12/27 Python
Python爬虫爬取糗事百科段子实例分享
2020/07/31 Python
python使用建议技巧分享(三)
2020/08/18 Python
波兰汽车配件网上商店:iParts.pl
2020/09/08 全球购物
应届生财务会计求职信
2013/11/05 职场文书
营销专业应届生求职信
2013/11/26 职场文书
思想专业自荐信范文
2013/12/25 职场文书
体育运动会广播稿
2014/10/05 职场文书
捐助倡议书
2015/01/19 职场文书
中秋节慰问信
2015/02/15 职场文书
2015年十一国庆节演讲稿
2015/03/20 职场文书
2015年暑期社会实践方案
2015/07/14 职场文书
《天使的翅膀》读后感3篇
2019/12/20 职场文书
vue3如何优雅的实现移动端登录注册模块
2021/03/29 Vue.js