Node.js Addons翻译(C/C++扩展)


Posted in Javascript onJune 12, 2016

PS:请先升级Node 6.2.1,Node 升级命令 npm install -g n;n stable.NOde.js扩展是一个通过C/C++编写的动态链接库,并通过Node.js的函数require()函数加载,用起来就像使用一个普通的Node.js模块。它主要为Node与C/C++库之间提供接口。

这样,若一个方法或函数是通过Node扩展实现则变得相当复杂,涉及几个模块与接口的知识:

•v8:一个实现了通过C++库实现了的javascript.V8提供了创建对象机制,回调函数等。V8API文档大多在v8.h头文件中。点我v8在线文档

•libuv:一个实现了Node.js的工作线程和异步行为的平台的事件循环的C库。它还充当了一个跨平台的抽象库,可以简单地POSIX-like式的访问所有主流操作系统系统许多常见任务,例如与文件系统交互、套接字、定时器和系统事件。libuv还提供了一个抽象pthreads-like线程,可以用于更复杂的异步。Node.js的C/C++扩展需要超越标准事件循环。插件作者鼓励去思考如何避免阻塞I/O事件循环和通过libuv非阻塞系统操作、工作线程、用户自定义的线程完成任务密集型工作。

•Node.js内置库:Node.js本身使用了大量的C/C++扩展的API,C/C++扩展时最重要的一个类node:ObjectWrap

•Node.js众多的静态链接库如OpenSSL:Node.js的其它的库在它的源码目录树下的 deps目录。详情请见·Node.js's own dependencies for additional information。点我Node.js官方扩展库示例,这也许是你为Node.js编写C/C++扩展库的起点。只有V8和OpenSSL类经常在Node C/C++扩展中频繁的使用。

Node C/C++扩展第一弹-最新示例Hello World

该示例适用Node.js版本号为V5.0以上。

// hello.js
const addon = require('./build/Release/addon');
console.log(addon.hello()); // 'world'
// hello.cc
#include <node.h>
#include <v8.h>
namespace demo {
using v8::FunctionCallbackInfo;
using v8::Isolate;
using v8::Local;
using v8::Object;
using v8::String;
using v8::Value;
void Method(const FunctionCallbackInfo<Value>& args) {
Isolate* isolate = args.GetIsolate();
args.GetReturnValue().Set(String::NewFromUtf8(isolate, "world"));
}
void init(Local<Object> exports) {
NODE_SET_METHOD(exports, "hello", Method);
}
NODE_MODULE(addon, init)
} // namespace demo 
// binding.gyp
{
"targets": [
{
"target_name": "addon",
"sources": [ "hello.cc" ]
}
]
}

node-gyp命令

node-gyp configure build

以上所述是小编给大家介绍的Node.js Addons翻译(C/C++扩展)的相关知识,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
分别用marquee和div+js实现首尾相连循环滚动效果,仅3行代码
Sep 21 Javascript
解决jquery异步按一定的时间间隔刷新问题
Dec 10 Javascript
浅谈javascript回调函数
Dec 07 Javascript
node.js中的fs.writeSync方法使用说明
Dec 15 Javascript
javascript 判断整数方法分享
Dec 16 Javascript
jQuery使用addClass()方法给元素添加多个class样式
Mar 26 Javascript
Javascript获取数组中的最大值和最小值的方法汇总
Jan 01 Javascript
关于JavaScript限制字数的输入框的那些事
Aug 14 Javascript
jQuery扩展+xml实现表单验证功能的方法
Dec 25 Javascript
js select下拉联动 更具级联性!
Apr 17 Javascript
解决vue2 在mounted函数无法获取prop中的变量问题
Nov 15 Javascript
vue Tab切换以及缓存页面处理的几种方式
Nov 05 Javascript
基于JS代码实现当鼠标悬停表格上显示这一格的全部内容
Jun 12 #Javascript
jQuery的each循环用法简单示例
Jun 12 #Javascript
基于jquery插件编写countdown计时器
Jun 12 #Javascript
跨域请求的完美解决方法(JSONP, CORS)
Jun 12 #Javascript
浅谈jquery的map()和each()方法
Jun 12 #Javascript
Jquery 自定义事件实现发布/订阅的简单实例
Jun 12 #Javascript
Bootstrap布局组件教程之Bootstrap下拉菜单
Jun 12 #Javascript
You might like
yii添删改查实例
2015/11/16 PHP
xmlHTTP实例
2006/10/24 Javascript
event.keyCode键码值表 附只能输入特定的字符串代码
2009/05/15 Javascript
jquery trim() 功能源代码
2011/02/14 Javascript
基于NodeJS的前后端分离的思考与实践(三)轻量级的接口配置建模框架
2014/09/26 NodeJs
js对象基础实例分析
2015/01/13 Javascript
常用的JavaScript WEB操作方法分享
2015/02/28 Javascript
javascript实现给定半径求出圆的面积
2015/06/26 Javascript
JS+DIV+CSS实现仿表单下拉列表效果
2015/08/18 Javascript
JS中对象与字符串的互相转换详解
2016/05/20 Javascript
总结JavaScript设计模式编程中的享元模式使用
2016/05/21 Javascript
详解Javascript几种跨域方式总结
2017/02/27 Javascript
微信小程序 监听手势滑动切换页面实例详解
2017/06/15 Javascript
requireJS模块化实现返回顶部功能的方法详解
2017/10/16 Javascript
vue计算属性时v-for处理数组时遇到的一个bug问题
2018/01/21 Javascript
JS运动特效之链式运动分析
2018/01/24 Javascript
vue数据控制视图源码解析
2018/03/28 Javascript
js使用formData实现批量上传
2020/03/27 Javascript
Vue框架下引入ActiveX控件的问题解决
2019/03/25 Javascript
小程序识别身份证,银行卡,营业执照,驾照的实现
2019/11/05 Javascript
JavaScript监听触摸事件代码实例
2019/12/30 Javascript
9种方法优化jQuery代码详解
2020/02/04 jQuery
快速解决Vue、element-ui的resetFields()方法重置表单无效的问题
2020/08/12 Javascript
JavaScript实现刮刮乐效果
2020/11/01 Javascript
[02:01]大师之路——DOTA2完美大师赛11月论剑上海
2017/11/06 DOTA
Python的Flask框架中SQLAlchemy使用时的乱码问题解决
2015/11/07 Python
python matplotlib坐标轴设置的方法
2017/12/05 Python
python2 与 python3 实现共存的方法
2018/07/12 Python
不管你的Python报什么错,用这个模块就能正常运行
2018/09/14 Python
python使用for循环计算0-100的整数的和方法
2019/02/01 Python
Python大数据之从网页上爬取数据的方法详解
2019/11/16 Python
详解python破解zip文件密码的方法
2020/01/13 Python
计算机网络专业个人的自我评价
2013/10/17 职场文书
医学护理毕业生自荐信
2013/11/07 职场文书
经典促销广告词大全
2014/03/19 职场文书
交通安全月活动总结
2015/05/08 职场文书