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 相关文章推荐
定时器(setTimeout/setInterval)调用带参函数失效解决方法
Mar 26 Javascript
jQuery实现加入购物车飞入动画效果
Mar 14 Javascript
js小数运算出现多位小数如何解决
Oct 08 Javascript
JS获取文件大小方法小结
Dec 08 Javascript
浅谈JS原生Ajax,GET和POST
Jun 08 Javascript
Web开发中客户端的跳转与服务器端的跳转的区别
Mar 05 Javascript
JS闭包用法实例分析
Mar 27 Javascript
微信小程序调用PHP后台接口 解析纯html文本
Jun 13 Javascript
Node.js 多线程完全指南总结
Mar 27 Javascript
小程序如何使用分包加载的实现方法
May 22 Javascript
Layui弹出层 加载 做编辑页面的方法
Sep 16 Javascript
JavaScript find()方法及返回数据实例
Apr 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
将酷狗krc歌词解析并转换为lrc歌词php源码
2014/06/20 PHP
PHP消息队列实现及应用详解【队列处理订单系统和配送系统】
2019/05/20 PHP
javascript事件模型代码
2007/07/01 Javascript
jquery加载页面的方法(页面加载完成就执行)
2011/06/21 Javascript
innerHTML与jquery里的html()区别介绍
2012/10/12 Javascript
解决js数据包含加号+通过ajax传到后台时出现连接错误
2013/08/01 Javascript
jQuery使用load()方法载入另外一个网页文件内的指定标签内容到div标签的方法
2015/03/25 Javascript
jquery滚动到顶部底部代码
2015/04/20 Javascript
AngularJS基础学习笔记之表达式
2015/05/10 Javascript
Javascript编写俄罗斯方块思路及实例
2015/07/07 Javascript
Bootstrap每天必学之折叠(Collapse)插件
2016/04/25 Javascript
Vue.js每天必学之内部响应式原理探究
2016/09/07 Javascript
vue-router跳转页面的方法
2017/02/09 Javascript
JS实现根据密码长度显示安全条功能
2017/03/08 Javascript
微信小程序使用checkbox显示多项选择框功能【附源码下载】
2017/12/11 Javascript
使用ngrok+express解决本地环境中微信接口调试问题
2018/02/26 Javascript
vue devtools的安装与使用教程
2018/08/08 Javascript
vue 使用高德地图vue-amap组件过程解析
2019/09/07 Javascript
Javascript Worker子线程代码实例
2020/02/20 Javascript
Vue+Spring Boot简单用户登录(附Demo)
2020/11/12 Javascript
[07:20]2018DOTA2国际邀请赛寻真——逐梦Mineski
2018/08/10 DOTA
[52:20]DOTA2-DPC中国联赛正赛 SAG vs XGBO3 第一场 3月5日
2021/03/11 DOTA
常见python正则用法的简单实例
2016/06/21 Python
Python编程scoketServer实现多线程同步实例代码
2018/01/29 Python
Sanic框架应用部署方法详解
2018/07/18 Python
浅谈Python2之汉字编码为unicode的问题(即类似\xc3\xa4)
2019/08/12 Python
python利用JMeter测试Tornado的多线程
2020/01/12 Python
粗加工管理制度
2014/02/04 职场文书
函授生自我鉴定
2014/03/25 职场文书
创建学习型党组织实施方案
2014/03/29 职场文书
产品销售计划书
2014/05/04 职场文书
护理目标管理责任书
2014/07/25 职场文书
关于清明节的演讲稿2015
2015/03/18 职场文书
2019自荐信范文集锦!
2019/07/03 职场文书
JavaScript实现简单图片切换
2021/04/29 Javascript
缓存替换策略及应用(以Redis、InnoDB为例)
2021/07/25 Redis