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 相关文章推荐
Jquery图形报表插件 jqplot简介及参数详解
Oct 10 Javascript
js实现点击链接后窗口缩小并居中的方法
Mar 02 Javascript
实现非常简单的js双向数据绑定
Nov 06 Javascript
JavaScript中闭包的写法和作用详解
Jun 29 Javascript
Laydate时间组件在火狐浏览器下有多时间输入框时只能给第一个输入框赋值的解决方法
Aug 18 Javascript
详解javascript获取url信息的常见方法
Dec 19 Javascript
JS字符串按逗号和回车分隔的方法
Apr 25 Javascript
jQuery Validate插件ajax方式验证输入值的实例
Dec 21 jQuery
Node.js使用Koa搭建 基础项目
Jan 08 Javascript
Vue+axios封装请求实现前后端分离
Oct 23 Javascript
一篇文章让你搞懂JavaScript 原型和原型链
Nov 23 Javascript
Vue中ref和$refs的介绍以及使用方法示例
Jan 11 Vue.js
基于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实现)只使用++运算实现加法,减法,乘法,除法
2013/06/27 PHP
php中通过curl检测页面是否被百度收录
2013/09/27 PHP
PHP对象、模式与实践之高级特性分析
2016/12/08 PHP
PHP设计模式之模板方法模式实例浅析
2018/12/20 PHP
ThinkPHP框架实现FTP图片上传功能示例
2019/04/08 PHP
PHP+mysql防止SQL注入的方法小结
2019/04/27 PHP
Laravel 自带的Auth验证登录方法
2019/09/30 PHP
Yii框架getter与setter方法功能与用法分析
2019/10/22 PHP
PHP 计算两个时间段之间交集的天数示例
2019/10/24 PHP
经典的解除许多网站无法复制文字的绝招
2006/12/31 Javascript
javascript 实现父窗口引用弹出窗口的值的脚本
2007/08/07 Javascript
JavaScript 一行代码,轻松搞定浮动快捷留言-V2升级版
2010/04/02 Javascript
JavaScript基础语法让人疑惑的地方小结
2012/05/23 Javascript
屏蔽网页右键复制和ctrl+c复制的js代码
2013/01/04 Javascript
JavaScript中的函数(二)
2015/12/23 Javascript
基于JS实现新闻列表无缝向上滚动实例代码
2016/01/22 Javascript
BootStrap树状图显示功能
2016/11/24 Javascript
PHP7新特性简述
2017/06/11 Javascript
详解关于react-redux中的connect用法介绍及原理解析
2017/09/11 Javascript
JavaScript设计模式之构造函数模式实例教程
2018/07/02 Javascript
微信小程序左滑删除功能开发案例详解
2018/11/12 Javascript
基于elementUI实现图片预览组件的示例代码
2019/03/31 Javascript
python2.7+selenium2实现淘宝滑块自动认证功能
2018/02/24 Python
python获取地震信息 微信实时推送
2019/06/18 Python
Numpy中ndim、shape、dtype、astype的用法详解
2020/06/14 Python
python使用自定义钉钉机器人的示例代码
2020/06/24 Python
Melijoe美国官网:法国奢侈童装购物网站
2017/04/19 全球购物
SQL Server面试题
2016/10/17 面试题
什么是Linux虚拟文件系统VFS
2015/08/25 面试题
《我不是最弱小的》教学反思
2014/02/23 职场文书
学习2014年全国两会心得体会
2014/03/12 职场文书
党员群众路线承诺书
2014/05/20 职场文书
教师节倡议书
2014/08/30 职场文书
工资收入证明样本(5篇)
2014/09/16 职场文书
原型和原型链 prototype和proto的区别详情
2021/11/02 Javascript
Windows Server 2022 超融合部署(图文教程)
2022/06/25 Servers