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中对Attr(dom中属性)的操作示例讲解
Dec 02 Javascript
利用jquery动画特效和css打造的侧边弹出垂直导航
Apr 04 Javascript
jquery制作图片时钟特效
Mar 30 Javascript
JS实现响应鼠标点击动画渐变弹出层效果代码
Mar 25 Javascript
Vue.js基础知识汇总
Apr 27 Javascript
每日十条JavaScript经验技巧(二)
Jun 23 Javascript
JS实现将Asp.Net的DateTime Json类型转换为标准时间的方法
Aug 02 Javascript
原生js实现电商侧边导航效果
Jan 19 Javascript
微信小程序 swiper组件构建轮播图的实例
Sep 20 Javascript
浅谈react受控组件与非受控组件(小结)
Feb 09 Javascript
layui点击数据表格添加或删除一行的例子
Sep 12 Javascript
原生JavaScript实现的无缝滚动功能详解
Jan 17 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操作mysqli(示例代码)
2013/10/28 PHP
PHP常见漏洞攻击分析
2016/02/21 PHP
javascript 支持ie和firefox杰奇翻页函数
2008/07/22 Javascript
node.js 一个简单的页面输出实现代码
2012/03/07 Javascript
解析DHTML,JavaScript,DOM,BOM以及WEB标准的描述
2013/06/19 Javascript
jQuery $.extend()用法总结
2014/06/15 Javascript
jQuery实现根据滚动条位置加载相应内容功能
2016/07/18 Javascript
js事件冒泡、事件捕获和阻止默认事件详解
2016/08/04 Javascript
AngularJS 文件上传控件 ng-file-upload详解
2017/01/13 Javascript
js事件委托和事件代理案例分享
2017/07/25 Javascript
JS中图片压缩的方法小结
2017/11/14 Javascript
在vue里面设置全局变量或数据的方法
2018/03/09 Javascript
nodejs中request库使用HTTPS代理的方法
2019/04/30 NodeJs
Elementui表格组件+sortablejs实现行拖拽排序的示例代码
2019/08/28 Javascript
js实现右键弹出自定义菜单
2020/09/08 Javascript
[23:18]Spirit vs Liquid Supermajor小组赛A组 BO3 第二场 6.2
2018/06/03 DOTA
Python xlrd读取excel日期类型的2种方法
2015/04/28 Python
深入解析Python中的线程同步方法
2016/06/14 Python
Python抓取框架 Scrapy的架构
2016/08/12 Python
Python字符串拼接的几种方法整理
2017/08/02 Python
Python操作redis和mongoDB的方法
2019/12/19 Python
canvas 阴影和图形变换的示例代码
2018/01/02 HTML / CSS
美国高端医师级美容产品电商:BeautifiedYou.com
2017/04/17 全球购物
Infababy英国:婴儿推车、Travel System婴儿车和婴儿汽车座椅销售
2018/05/23 全球购物
Why do we need Unit test
2013/01/03 面试题
高中生班主任评语
2014/04/25 职场文书
员工考核评语大全
2014/04/26 职场文书
技能比武方案
2014/05/21 职场文书
关于读书的演讲稿600字
2014/08/27 职场文书
擅自离岗检讨书
2014/09/12 职场文书
关于长城的导游词
2015/01/30 职场文书
六一晚会主持词开场白
2015/05/28 职场文书
2016年教师党员创先争优承诺书
2016/03/24 职场文书
MySQL 自定义变量的概念及特点
2021/05/13 MySQL
MySQL下使用Inplace和Online方式创建索引的教程
2021/05/26 MySQL
从原生JavaScript到React深入理解
2022/07/23 Javascript