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 相关文章推荐
防止文件缓存的js代码
Jan 10 Javascript
固定背景实现的背景滚动特效示例分享
May 19 Javascript
jquery实现的一个导航滚动效果具体代码
May 27 Javascript
node.js中的fs.fstat方法使用说明
Dec 15 Javascript
实例代码详解javascript实现窗口抖动及qq窗口抖动
Jan 04 Javascript
JavaScript中Number对象的toFixed() 方法详解
Sep 02 Javascript
使用JS轻松实现ionic调用键盘搜索功能(超实用)
Sep 06 Javascript
利用JS对iframe父子(内外)页面进行操作的方法教程
Jun 15 Javascript
vue.js 图片上传并预览及图片更换功能的实现代码
Aug 27 Javascript
基于Vue实现电商SKU组合算法问题
May 29 Javascript
Angular封装表单控件及思想总结
Dec 11 Javascript
ant-design-vue 实现表格内部字段验证功能
Dec 16 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 引用是个坏习惯
2010/03/12 PHP
《PHP编程最快明白》第五讲:php目录、文件操作
2010/11/01 PHP
php最简单的删除目录与文件实现方法
2014/11/28 PHP
php中使用key,value,current,next和prev函数遍历数组的方法
2015/03/17 PHP
php基础设计模式大全(注册树模式、工厂模式、单列模式)
2015/08/31 PHP
PHP实现163邮箱自动发送邮件
2016/03/29 PHP
PHP对称加密算法(DES/AES)类的实现代码
2017/11/14 PHP
javascript之函数直接量(function(){})()
2007/06/29 Javascript
jquery 层次选择器siblings与nextAll的区别介绍
2013/08/02 Javascript
js输出阴历、阳历、年份、月份、周示例代码
2014/01/29 Javascript
全面兼容的javascript时间格式化函数(比较实用)
2014/05/14 Javascript
node.js集成百度UE编辑器
2015/02/05 Javascript
JS传值出现中文参数乱码的解决方法
2016/06/30 Javascript
Bootstrap对话框使用实例讲解
2016/09/24 Javascript
node.js爬虫爬取拉勾网职位信息
2017/03/14 Javascript
jQuery完成表单验证的实例代码(纯代码)
2017/09/30 jQuery
nodejs基于mssql模块连接sqlserver数据库的简单封装操作示例
2018/01/05 NodeJs
layui表格 返回的数据状态异常的解决方法
2019/09/10 Javascript
JavaScript实现文件下载并重命名代码实例
2019/12/12 Javascript
vue请求数据的三种方式
2020/03/04 Javascript
讲解Python中的标识运算符
2015/05/14 Python
DataFrame中的object转换成float的方法
2018/04/10 Python
Python判断两个list是否是父子集关系的实例
2018/05/04 Python
使用CodeMirror实现Python3在线编辑器的示例代码
2019/01/14 Python
Python 如何创建一个线程池
2020/07/28 Python
伊利莎白雅顿官网:Elizabeth Arden
2016/10/10 全球购物
全球速卖通法国在线交易平台:AliExpress法国
2017/07/07 全球购物
为奢侈时尚带来了慈善元素:Olivela
2018/09/29 全球购物
仪器仪表检测毕业生自荐信
2013/10/31 职场文书
高三地理教学反思
2014/01/11 职场文书
酒店总经理助理岗位职责
2014/02/01 职场文书
党员批评与自我批评
2014/02/12 职场文书
2014党员干部四风问题对照检查材料思想汇报
2014/09/24 职场文书
2016廉洁从政心得体会
2016/01/19 职场文书
nginx优化的六点方法
2021/03/31 Servers
HTML5 新增内容和 API详解
2021/11/17 HTML / CSS