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 相关文章推荐
33个优秀的 jQuery 图片展示插件分享
Mar 14 Javascript
JavaScript中的prototype.bind()方法介绍
Apr 04 Javascript
JS实现的一个简单的Autocomplete自动完成例子
Apr 16 Javascript
删除javascript中注释语句的正则表达式
Jun 11 Javascript
jQuery使用hide方法隐藏页面上指定元素的方法
Mar 30 Javascript
js仿支付宝填写支付密码效果实现多方框输入密码
Mar 09 Javascript
基于JavaScript FileReader上传图片显示本地链接
May 27 Javascript
Node.js Mongodb 密码特殊字符 @的解决方法
Apr 11 Javascript
jQuery 控制文本框自动缩小字体填充
Jun 16 jQuery
JavaScript偏函数与柯里化实例详解
Mar 27 Javascript
vue实现移动端图片上传功能
Dec 23 Javascript
Angular进行简单单元测试的实现方法实例
Aug 16 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
wordpress自定义url参数实现路由功能的代码示例
2013/11/28 PHP
php防止sql注入之过滤分页参数实例
2014/11/03 PHP
ThinkPHP 5.x远程命令执行漏洞复现
2019/09/23 PHP
最好用的省市二级联动 原生js实现你值得拥有
2013/09/22 Javascript
jQuery aminate方法定位到页面具体位置
2013/12/26 Javascript
动态加载js、css等文件跨iframe实现
2014/02/24 Javascript
js 实现浏览历史记录示例
2014/04/20 Javascript
JS计算网页停留时间代码
2014/04/28 Javascript
jquery阻止后续事件只执行第一个事件
2014/07/24 Javascript
AngularJS中的模块详解
2015/01/29 Javascript
Node做中转服务器转发接口
2017/10/18 Javascript
原生javascript实现文件异步上传的实例讲解
2017/10/26 Javascript
Vue无限滑动周选择日期的组件的示例代码
2018/07/18 Javascript
js判断密码强度的方法
2020/03/18 Javascript
python实现代码行数统计示例分享
2014/02/10 Python
Python tempfile模块学习笔记(临时文件)
2014/05/25 Python
python实现获取Ip归属地等信息
2016/08/27 Python
ubuntu中配置pyqt4环境教程
2017/12/27 Python
深入浅析Python 中的sklearn模型选择
2019/10/12 Python
Python 中如何实现参数化测试的方法示例
2019/12/10 Python
Python中 Global和Nonlocal的用法详解
2020/01/20 Python
用Python绘制漫步图实例讲解
2020/02/26 Python
解决阿里云邮件发送不能使用25端口问题
2020/08/07 Python
python向企业微信发送文字和图片消息的示例
2020/09/28 Python
印度尼西亚综合购物网站:Lazada印尼
2016/09/07 全球购物
JavaScript实现页面动态验证码的实现示例
2021/03/23 Javascript
机修工岗位职责
2013/11/24 职场文书
父亲八十大寿答谢词
2014/01/23 职场文书
幼教求职信
2014/03/12 职场文书
中药学专业求职信
2014/05/31 职场文书
导航工程专业自荐信
2014/09/02 职场文书
北京天坛导游词
2015/02/12 职场文书
鉴史问廉观后感
2015/06/10 职场文书
幼儿园小班教育随笔
2015/08/14 职场文书
Python中json.dumps()函数的使用解析
2021/05/17 Python
使用CSS实现音波加载效果
2023/05/07 HTML / CSS