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对象及属性
Feb 13 Javascript
JavaScript中的事件处理
Jan 16 Javascript
js语法学习之判断一个对象是否为数组
May 13 Javascript
Bootstrap每天必学之下拉菜单
Nov 25 Javascript
JS实现图片剪裁并预览效果
Aug 12 Javascript
Jquery遍历select option和添加移除option的实现方法
Aug 26 Javascript
详解Angular 4.x 动态创建组件
Apr 25 Javascript
分析javascript中9 个常见错误阻碍你进步
Sep 18 Javascript
Vue2.5通过json文件读取数据的方法
Feb 27 Javascript
vue-cli系列之vue-cli-service整体架构浅析
Jan 14 Javascript
webpack自动打包和热更新的实现方法
Jun 24 Javascript
JS实现页面炫酷的时钟特效示例
Aug 14 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/04/07 PHP
php命令行使用方法和命令行参数说明
2014/04/08 PHP
CodeIgniter错误mysql_connect(): No such file or directory解决方法
2014/09/06 PHP
利用JQuery和JS实现奇偶行背景颜色自定义效果
2012/11/19 Javascript
jQuery模拟新浪微博首页滚动效果的方法
2015/03/11 Javascript
推荐三款日期选择插件(My97DatePicker、jquery.datepicker、Mobiscroll)
2017/04/21 jQuery
JS实现数组简单去重及数组根据对象中的元素去重操作示例
2018/01/05 Javascript
JS在if中的强制类型转换方式
2018/07/15 Javascript
vue基于element的区间选择组件
2018/09/07 Javascript
JavaScript学习教程之cookie与webstorage
2019/06/23 Javascript
html+vue.js 实现漂亮分页功能可兼容IE
2020/11/07 Javascript
[27:02]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS LGD第三场
2014/05/24 DOTA
[47:04]EG vs RNG 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/18 DOTA
Python使用redis pool的一种单例实现方式
2016/04/16 Python
使用pandas中的DataFrame数据绘制柱状图的方法
2018/04/10 Python
python dataframe向下向上填充,fillna和ffill的方法
2018/11/28 Python
python用post访问restful服务接口的方法
2018/12/07 Python
postman传递当前时间戳实例详解
2019/09/14 Python
三步解决python PermissionError: [WinError 5]拒绝访问的情况
2020/04/22 Python
python安装sklearn模块的方法详解
2020/11/28 Python
利用CSS的Sass预处理器(框架)来制作居中效果
2016/03/10 HTML / CSS
米兰必去买手店排行榜首位:Antonioli
2016/09/11 全球购物
英国最大的自有市场,比亚马逊便宜:Flubit
2019/03/19 全球购物
吉尔德利巧克力公司:Ghirardelli Chocolate Company
2019/03/27 全球购物
意大利买卖二手奢侈品网站:LAMPOO
2020/06/03 全球购物
空字符串(“”)和null的区别
2012/11/13 面试题
一套C++笔试题面试题
2012/06/06 面试题
static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函数与普通函数有什么区别?
2015/02/22 面试题
实习生单位鉴定意见
2013/12/04 职场文书
房屋转让协议书范本
2014/04/11 职场文书
校园文明倡议书
2014/05/16 职场文书
公司节能减排方案
2014/05/16 职场文书
大学生村官工作总结2015
2015/04/09 职场文书
单方投资意向书
2015/05/11 职场文书
八年级物理教学反思
2016/02/19 职场文书
技术入股协议书
2016/03/22 职场文书