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 相关文章推荐
JavaScript 继承使用分析
May 12 Javascript
jQuery中RadioButtonList的功能及用法实例介绍
Aug 23 Javascript
JavaScript中ES6 Babel正确安装过程
Jul 18 Javascript
JavaScript实现邮箱地址自动匹配功能代码
Nov 28 Javascript
Node.js使用Express创建Web项目详细教程
Mar 31 Javascript
Vue.js实现价格计算器功能
Mar 30 Javascript
js实现复制功能(多种方法集合)
Jan 06 Javascript
babel的使用及安装配置教程
Feb 22 Javascript
vue 右键菜单插件 简单、可扩展、样式自定义的右键菜单
Nov 29 Javascript
傻瓜式vuex语法糖kiss-vuex整理
Dec 21 Javascript
nodemon实现Typescript项目热更新的示例代码
Nov 19 Javascript
vue 解决IOS10低版本白屏的问题
Nov 17 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
php提示无法加载或mcrypt没有找到 PHP 扩展 mbstring解决办法
2012/03/27 PHP
PHP实现微信提现功能(微信商城)
2019/11/21 PHP
php+iframe 实现上传文件功能示例
2020/03/04 PHP
关于ExtJS4.1:快捷键支持的问题
2013/04/24 Javascript
各种常用的JS函数整理
2013/10/25 Javascript
js动态修改整个页面样式达到换肤效果
2014/05/23 Javascript
jquery动态加载js/css文件方法(自写小函数)
2014/10/11 Javascript
原生js实现模拟滚动条
2015/06/15 Javascript
纯javascript判断查询日期是否为有效日期
2015/08/24 Javascript
JavaScript对象数组的排序处理方法
2015/10/21 Javascript
jQuery插件passwordStrength密码强度指标详解
2016/06/24 Javascript
图文详解JavaScript的原型对象及原型链
2016/08/02 Javascript
js使用html2canvas实现屏幕截取的示例代码
2017/08/28 Javascript
js链表操作(实例讲解)
2017/08/29 Javascript
浅谈js中的bind
2019/03/18 Javascript
基于Node.js的大文件分片上传示例
2019/06/19 Javascript
JS中的算法与数据结构之字典(Dictionary)实例详解
2019/08/20 Javascript
vue使用canvas实现移动端手写签名
2020/09/22 Javascript
Python 时间操作例子和时间格式化参数小结
2014/04/24 Python
Python最基本的输入输出详解
2015/04/25 Python
Python实现获取磁盘剩余空间的2种方法
2017/06/07 Python
详解django中自定义标签和过滤器
2017/07/03 Python
PyTorch之图像和Tensor填充的实例
2019/08/18 Python
python 获取字典键值对的实现
2020/11/12 Python
python文件路径操作方法总结
2020/12/21 Python
美国在线印刷公司:PsPrint
2017/10/12 全球购物
潘多拉珠宝英国官方网上商店:PANDORA英国
2018/06/12 全球购物
美国眼镜网站:LensCrafters
2020/01/19 全球购物
澳大利亚有机化妆品网上商店:The Well Store
2020/02/20 全球购物
C#里面如何判断一个Object是否是某种类型(如Boolean)?
2016/02/10 面试题
如何掌握自荐信格式呢
2013/11/19 职场文书
留学推荐信怎么写
2014/01/25 职场文书
师范生自我鉴定
2014/03/20 职场文书
2015年学校后勤工作总结
2015/04/08 职场文书
2016公司年会通知范文
2015/04/25 职场文书
Python 制作自动化翻译工具
2021/04/25 Python