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 使用手册(二)
Sep 23 Javascript
javascript 内存回收机制理解
Jan 17 Javascript
window.open关于浏览器拦截问题分析及解决方法
Feb 05 Javascript
JavaScript获得url查询参数的方法
Jul 02 Javascript
JS自定义选项卡函数及用法实例分析
Sep 02 Javascript
Node.js插件安装图文教程
May 06 Javascript
轻松实现jQuery添加删除按钮Click事件
Mar 13 Javascript
webpack引入eslint配置详解
Jan 22 Javascript
基于js Canvas实现二次贝塞尔曲线
Dec 25 Javascript
vue项目中全局引入1个.scss文件的问题解决
Aug 01 Javascript
完美解决通过IP地址访问VUE项目的问题
Jul 18 Javascript
解决vue侦听器watch,调用this时出现undefined的问题
Oct 30 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截取字符串之截取utf8或gbk编码的中英文字符串示例
2014/03/12 PHP
PHP往XML中添加节点的方法
2015/03/12 PHP
采用CSS和JS,刚好我最近有个站点要用到下拉菜单!
2006/06/26 Javascript
js location.replace与location.reload的区别
2010/09/08 Javascript
利用js实现遮罩以及弹出可移动登录窗口
2013/07/08 Javascript
showModalDialog模态对话框的使用详解以及浏览器兼容
2014/01/11 Javascript
jquery ajax传递中文参数乱码问题及解决方法说明
2014/02/07 Javascript
javascript获取四位数字或者字母的随机数
2015/01/09 Javascript
javascript实现时间格式输出FormatDate函数
2015/01/13 Javascript
JavaScript学习小结之使用canvas画“哆啦A梦”时钟
2016/07/24 Javascript
微信JS接口大全
2016/08/25 Javascript
AngularJS 面试题集锦
2016/09/06 Javascript
Java与JavaScript中判断两字符串是否相等的区别
2017/03/13 Javascript
vue上传图片组件编写代码
2017/07/26 Javascript
JavaScript创建对象方式总结【工厂模式、构造函数模式、原型模式等】
2018/12/19 Javascript
vue如何获取自定义元素属性参数值的方法
2019/05/14 Javascript
layui多图上传实现删除功能的例子
2019/09/23 Javascript
你不可不知的Vue.js列表渲染详解
2019/10/01 Javascript
Vue3 的响应式和以前有什么区别,Proxy 无敌?
2020/05/20 Javascript
15个简单的JS编码标准让你的代码更整洁(小结)
2020/07/16 Javascript
Python3基础之基本运算符概述
2014/08/13 Python
python实现机器学习之多元线性回归
2018/09/06 Python
pytorch 调整某一维度数据顺序的方法
2018/12/08 Python
python使用mitmproxy抓取浏览器请求的方法
2019/07/02 Python
在SQLite-Python中实现返回、查询中文字段的方法
2019/07/17 Python
Python爬虫自动化爬取b站实时弹幕实例方法
2021/01/26 Python
matplotlib之多边形选区(PolygonSelector)的使用
2021/02/24 Python
英国工艺品购物网站:Minerva Crafts
2018/01/29 全球购物
Gap英国官网:Gap UK
2018/07/18 全球购物
面向中国市场的在线海淘美妆零售网站:Beauty House美丽屋
2021/03/02 全球购物
个人简历自荐信
2013/12/05 职场文书
送货司机岗位职责
2013/12/11 职场文书
大学生个人求职口试自我评价
2014/02/16 职场文书
学生会部长竞聘书
2014/03/31 职场文书
全新239军机修复记
2022/04/05 无线电
MySQL 数据 data 基本操作
2022/05/04 MySQL