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 相关文章推荐
js实现杯子倒水问题自动求解程序
Mar 25 Javascript
举例讲解JavaScript中关于对象操作的相关知识
Nov 16 Javascript
谈一谈bootstrap响应式布局
May 23 Javascript
第一次接触神奇的Bootstrap导航条
Aug 09 Javascript
AngularJS删除路由中的#符号的方法
Sep 20 Javascript
微信小程序表单弹窗实例
Jul 19 Javascript
Vue通过ref父子组件拿值方法
Sep 12 Javascript
小程序异步问题之多个网络请求依次执行并依次收集请求结果
May 05 Javascript
Node.js实现用户评论社区功能(体验前后端开发的乐趣)
May 09 Javascript
jquery制作的移动端购物车效果完整示例
Feb 24 jQuery
vue2.0 解决抽取公用js的问题
Jul 31 Javascript
Vue 事件的$event参数=事件的值案例
Jan 29 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
国王的咖啡这么大来头,名字的由来是什么
2021/03/03 咖啡文化
DedeCMS 核心类TypeLink.class.php摘要笔记
2010/04/07 PHP
探讨:如何使用PHP实现计算两个日期间隔的年、月、周、日数
2013/06/13 PHP
ThinkPHP模型详解
2015/07/27 PHP
使用Grunt.js管理你项目的应用说明
2013/04/24 Javascript
分享JavaScript获取网页关闭与取消关闭的事件
2013/12/13 Javascript
浅析js设置控件的readonly与enabled属性问题
2013/12/25 Javascript
多选列表框动态添加,移动,删除,全选等操作的简单实例
2014/01/13 Javascript
原生JavaScript生成GUID的实现示例
2014/09/05 Javascript
JavaScript制作简易的微信打飞机
2015/03/31 Javascript
浅谈jquery.form.js的ajaxSubmit和ajaxForm的使用
2016/09/09 Javascript
AngularJs上传前预览图片的实例代码
2017/01/20 Javascript
es6的数字处理的方法(5个)
2017/03/16 Javascript
整理关于Bootstrap导航的慕课笔记
2017/03/29 Javascript
原生JavaScript实现精美的淘宝轮播图效果示例【附demo源码下载】
2017/05/27 Javascript
详解nodejs实现本地上传图片并预览功能(express4.0+)
2017/06/28 NodeJs
一步步教你利用Canvas对图片进行处理
2017/09/19 Javascript
为什么说JavaScript预解释是一种毫无节操的机制详析
2018/11/18 Javascript
Layui表格行工具事件与数据回填方法
2019/09/13 Javascript
原生js实现自定义滚动条
2021/01/20 Javascript
Python yield 小结和实例
2014/04/25 Python
python3.5实现socket通讯示例(TCP)
2017/02/07 Python
python OpenCV学习笔记直方图反向投影的实现
2018/02/07 Python
Python网络编程之使用TCP方式传输文件操作示例
2019/11/01 Python
小 200 行 Python 代码制作一个换脸程序
2020/05/12 Python
浅析Python中字符串的intern机制
2020/10/03 Python
Python自动化测试基础必备知识点总结
2021/02/07 Python
美国美发品牌:Bumble and Bumble
2016/10/08 全球购物
Bowflex美国官方网站:高级家庭健身器材
2017/12/22 全球购物
Java TransactionAPI (JTA) 主要包含几部分
2012/12/07 面试题
校班主任推荐信范文
2013/12/03 职场文书
自荐书范文
2013/12/08 职场文书
年度考核表个人总结
2015/03/06 职场文书
陈斌强事迹观后感
2015/06/17 职场文书
幼儿园开学温馨提示
2015/07/15 职场文书
2016年党员公开承诺书格式范文
2016/03/24 职场文书