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 相关文章推荐
实现复选框全选/全不选切换
Dec 23 Javascript
初学JavaScript第二章
Sep 30 Javascript
单击浏览器右上角的X关闭窗口弹出提示的小例子
Jun 12 Javascript
js、jquery图片动画、动态切换示例代码
Jun 03 Javascript
实例分析js和C#中使用正则表达式匹配a标签
Nov 26 Javascript
javascript中Array数组的迭代方法实例分析
Feb 04 Javascript
javascript实现简单的分页特效
Aug 12 Javascript
javascript数据结构之二叉搜索树实现方法
Nov 25 Javascript
BootStrap智能表单demo示例详解
Jun 13 Javascript
Vue 实现前进刷新后退不刷新的效果
Jun 14 Javascript
layui 富文本赋值,取值,取纯文本值的实例
Sep 18 Javascript
JS ES6异步解决方案
Apr 29 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
日本十大科幻动漫 宇宙骑士垫底,第一已成经典
2020/03/04 日漫
安装APACHE
2007/01/15 PHP
开启CURL扩展,让服务器支持PHP curl函数(远程采集)
2011/03/19 PHP
mysql 查询指定日期时间内sql语句实现原理与代码
2012/12/16 PHP
Laravel学习教程之View模块详解
2017/09/18 PHP
javascript之AJAX框架使用说明
2010/04/24 Javascript
jquery索引在使用中的一些困惑
2013/10/24 Javascript
js实现的tab标签切换效果代码分享
2015/08/25 Javascript
jquery制作图片时钟特效
2020/03/30 Javascript
学习javascript面向对象 掌握创建对象的9种方式
2016/01/04 Javascript
基于Bootstrap实现Material Design风格表单插件 附源码下载
2016/04/18 Javascript
解决微信浏览器Javascript无法使用window.location.reload()刷新页面
2016/06/21 Javascript
bootstrap table小案例
2016/10/21 Javascript
Vuex模块化实现待办事项的状态管理
2017/03/15 Javascript
JS兼容所有浏览器的DOMContentLoaded事件
2018/01/12 Javascript
Vue3.x源码调试的实现方法
2019/10/13 Javascript
vue中监听路由参数的变化及方法
2019/12/06 Javascript
python使用webbrowser浏览指定url的方法
2015/04/04 Python
Python 将RGB图像转换为Pytho灰度图像的实例
2017/11/14 Python
python实现树形打印目录结构
2018/03/29 Python
python实现搜索文本文件内容脚本
2018/06/22 Python
python 使用pandas计算累积求和的方法
2019/02/08 Python
py-charm延长试用期限实例
2019/12/22 Python
python GUI库图形界面开发之PyQt5中QMainWindow, QWidget以及QDialog的区别和选择
2020/02/26 Python
python matplotlib包图像配色方案分享
2020/03/14 Python
python实现坦克大战
2020/04/24 Python
python的reverse函数翻转结果为None的问题
2020/05/11 Python
anaconda安装pytorch1.7.1和torchvision0.8.2的方法(亲测可用)
2021/02/01 Python
网络体系结构及协议的定义
2014/03/13 面试题
自荐信格式范文
2013/10/07 职场文书
分家协议书
2014/04/21 职场文书
公司财务会计主管应聘求职信
2014/09/26 职场文书
离婚协议书包括哪些内容
2014/10/16 职场文书
2015自愿离婚协议书范本
2015/01/28 职场文书
公积金贷款承诺书
2015/04/30 职场文书
2016道德模范先进事迹材料
2016/02/26 职场文书